Комментарии 15
Не было идеи просто сделать плату подсветки на копеечных SMD светодиодах формата 0805? Тогда нижний торец можно было бы сделать плоским и подсветка была бы намного равномернее.
Хотя даже с текущей конструкцией можно было бы существенно улучшить равномерность подсветки если сделать ножки не прямоугольниками, а трапециями и матировать нижнюю грань (обращённую к светодиодам).
X-фильм // Банкомат, Lave, верёвка.
Боже, аш олдскулы свело… Мне не удалось попасть на съёмки фильма, так как была сессия…
tick_ClockColon.attach(MATRIX_COLON_REFRESH_INTERVAL, matrix_printColon); //task to print clock colon ":"
tick_Clock.attach(MATRIX_CLOCK_REFRESH_INTERVAL, matrix_printTime); //task to get time from ESP8266 RTC & print hh mm
Теперь решил добавить вывод погоды и никак не получается красиво сделать остановку и запуск тасков в Ticker.
У вас как планировщик работает?
И отвязка (остановка) — detach() — читайте Ticker.h
Вечером буду дома — покажу другие примеры из кода, и наверно выложу на гитхаб.
И да, один экземпляр тикера может вести только одну функцию, т.е. если я делаю аттач с другим коллбэком на тот же инстанс, то он перекрывается.
На видео можно проследить наглядно: у каждой лампы свой планировщик (с рандомным таймером) на цветовой переход от жёлтого к красному, один общий на перебор всех слоёв при переключении.
В момент перехода на следующую минуту, я запускаю перебор с 6 по первую лампу через
once_ms_scheduled() со временем кратным обратному номеру лампы (0,250,500,750,1000,1250);
На 5й (на второй справа) лампе он подвисает, потому что в этот момент ещё перезагружает настройку базового оттенка (синего) из файла, и ему похоже не хватает ресурсов.
Этот баг сейчас решен так: Перед перебором ставлю цветовой перелив на паузу и, затем снова запускаю когда он отработал, плюс на время перебора ставлю запрет на изменение оттенка, который тоже происходит только после окончания перебора.
Исходники Ticker.h конечно смотрел и про attach/detach знаю. Спасибо огромное за информацию о once_ms_scheduled(). У меня затык как красиво реализовать такую задачу. Сейчас имею два тикер. Один раз в пол секунды вкл/вкл точки часов, второй раз в секунду обновляет hh и mm часов. Хочу добавить, чтоб раз в 15 секунд ставить первые два тикера на паузу и запускать тикер показа температуры в течении 5 сек, за ним тикер показа влажности опять на 5 секунд. Причем в течении этих 5 секудн не хочется постоянно долбить MAX7219, гонняя байты по SPI в пустую. Послал один раз и ждёшь. Потом опять показ времени и по кругу...
Еще вопрос, вы будильник тоже через Ticker.h делали?
Извините за глупые вопросы, я программист по состоянию души, а не по профессии.
Запуски тикеров можно положить в отдельные методы.
// show Ticking time and wait for 15 seconds, than stop ticking and show temp
void setTimeIntervals(){
tick_ClockColon.attach_ms_scheduled(500, matrix_printColon); //task to print clock colon ":"
tick_Clock.attach_ms_scheduled(500, matrix_printTime); //task to get time from ESP8266 RTC & print hh mm
tick_Mode.once_ms_scheduled(15000, [](){
stopTimeIntervals();
setTempIntervals()
});
}
void stopTimeIntervals(){
tick_ClockColon.detach();
tick_Clock.detach();
}
// show Temp and wait for 5 seconds
void setTempIntervals(){
matrix_printTemp();
tick_Mode.once_ms_scheduled(5000, setHumidityIntervals );
}
// show Humidity and wait for 5 seconds
void setHumidityIntervals(){
matrix_printHumidity();
tick_Mode.once_ms_scheduled(5000, setTimeIntervals );
}
Даже там где анонимные функции — всё равно вполне читаемо и работает
Было бы круто увидеть джиджитал версию проекта в виде модуля для Magic Mirror)
https://github.com/MichMich/MagicMirror
Электронные часы в духе Cronixie