Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Железо для умного дома

ТЕМА: Конструктор кода в конструкторе прошивки ESP8266

Конструктор кода в конструкторе прошивки ESP8266 26 Нояб 2017 12:26 #20510

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
int i; поменять на static int i;
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.
Спасибо сказали: Staryjdub

Конструктор кода в конструкторе прошивки ESP8266 26 Нояб 2017 12:33 #20512

  • VictorS
  • VictorS аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 104
  • Спасибо получено: 12
  • Репутация: 2
Staryjdub пишет:
Да уш, с моими познаниями в СИ это китайская грамота!!! И на порядок сложнее того что я хочу от кода...

я просто показал принцип. делаем процедуру вызываемую по таймеру, и в нем меняем значение pwm. можем в процедуре тупо изменять pwm на 1, а скорость регулируем при запуске таймера, выставив желаемый период запуска.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Staryjdub

Конструктор кода в конструкторе прошивки ESP8266 27 Нояб 2017 10:31 #20538

  • Staryjdub
  • Staryjdub аватар
  • Не в сети
  • Новый участник
  • Сообщений: 18
  • Репутация: 0
Не придумав ничего умнее, я решил взять усидчивостью... На 44ой странице в посте #13910 нашел реализацию того что я хотел. Слегка обработал рашпилем.
static os_timer_t esp_timer1; //Объявляем первый таймер, он будет опрашивать пин
static os_timer_t esp_timer2; //Объявляем второй таймер, он будет отсчитывать задержку
int gpio = 15; // номер gpio управления
int pw = 0; // ШИМ управления светом GPIO#

int w = 0; // Начальная яркость
int wmax = 200; // Максимальная яркость
int fade = 1; // Шаг изменения яркости
int g = 0; // начальное значение GPIO управления
int p = 20; // тик задержки в миллисекундах

pwn_wr(){ //функция записи ШИМ
w = w + fade;
analogWrite(pw,w);
if (w == wmax || w == 0) { // закончился цикл
os_timer_disarm(&esp_timer2); //выключаем второй таймер
os_timer_arm(&esp_timer1, 20, 1); //включаем обратно первый таймер
}
}

read_gpio(){ //функция, читающая GPIO 
if (digitalRead(gpio) != g) { //если на gpio изменилось состояние, то ..
os_timer_disarm(&esp_timer1); //выключаем первый таймер, чтобы не тикал зря и не генерировал события
g = digitalRead(gpio);
if (g == 0) { w = wmax; fade = -1;} else { w = 0; fade = 1;  }; //  проверяем режим
os_timer_setfn(&esp_timer2, (os_timer_func_t *) pwn_wr, NULL); //говорим, что при тике надо вызвать pwn_wr()
os_timer_arm(&esp_timer2, p, 1); //включаем таймер, говорим, что тик должен происходить раз в p мс
}
}

void ICACHE_FLASH_ATTR
startfunc(){ //функция, запускаемая при старте модуля
//analogWrite(pw,0); //при старте выключаем ШИМ
os_timer_setfn(&esp_timer1, (os_timer_func_t *) read_gpio, NULL); //говорим, что при каждом тике надо вызвать read_gpio()
os_timer_arm(&esp_timer1, 20, 1); //включаем таймер, говорим, что тик должен происходить каждые 10мс
}

void ICACHE_FLASH_ATTR
timerfunc(uint32_t  timersrc) {
}

void webfunc(char *pbuf) {
os_sprintf(HTTPBUFF,"</div><div class=blockk>");
}
Код откомпилился и заработал. Но проблема с которой столкнулся Автор abv2003, а именно крышеход у контроллера при начальной записи
analogWrite(pw,0); //при старте выключаем ШИМ
так и осталась. При удалении строки шим изначально устанавливается в максимум....
Администратор запретил публиковать записи гостям.

Конструктор кода в конструкторе прошивки ESP8266 27 Нояб 2017 10:41 #20539

  • Kris123t
  • Kris123t аватар
  • Не в сети
  • Новый участник
  • Сообщений: 4
  • Спасибо получено: 1
  • Репутация: 0
Да в ШИМ нельзя писать в стартовой части, которая исполняется один раз, потом в таймерах - можно, но делай delay(2) между соседними записями если идут подряд или 2-3 арифметических команды между записями. У меня есть код который регулирует яркость шим по опросу кнопок + и - к примеру и управляет светом по нажатию на кнопку - короткое нажатие: вкл или выкл, длинное - перебирает варианты света по трем каналам. Осторожно, возможен быдлокод :) первая программа


ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 27 Нояб 2017 10:44 от Kris123t.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Staryjdub

Конструктор кода в конструкторе прошивки ESP8266 27 Нояб 2017 10:46 #20540

  • Kris123t
  • Kris123t аватар
  • Не в сети
  • Новый участник
  • Сообщений: 4
  • Спасибо получено: 1
  • Репутация: 0
Кстати также замечено что при записи в VGPIO - все хорошо когда пишем только в одно VGPIO, а если нужно записать в два - то пишется только в последний. Даже задержки Delay (30) не помогли
Администратор запретил публиковать записи гостям.

Конструктор кода в конструкторе прошивки ESP8266 27 Нояб 2017 11:09 #20541

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
VGPIO - это же функция tcp подключения. а она не быстрая..
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.
Модераторы: FlyRouter
Время создания страницы: 0.152 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.