Комментарии 15
А цветастость была важным условием? Всё-таки адресные светодиоды весьма крупные, из-за этого приходится делать «ножки-световоды», которые дают некрасивые «пучки» света снизу.
Не было идеи просто сделать плату подсветки на копеечных SMD светодиодах формата 0805? Тогда нижний торец можно было бы сделать плоским и подсветка была бы намного равномернее.
Хотя даже с текущей конструкцией можно было бы существенно улучшить равномерность подсветки если сделать ножки не прямоугольниками, а трапециями и матировать нижнюю грань (обращённую к светодиодам).
3мм не слишком толсто? Пробовали тонкий пластик? По идее и с 1 мм должно работать, зато дальняя цифра не будет так глубоко спрятана
слишком =) поэтому в последних итерациях ПЭТ 1,5мм, ножки на диод смотрят прямоугольным концом, дальше расширяются под 45 градусов
X-фильм // Банкомат, Lave, верёвка.


Боже, аш олдскулы свело… Мне не удалось попасть на съёмки фильма, так как была сессия…
Пишу часы, но на MAX7219. Застрял на планировщике/Scheduler. У меня отображение времени и точек идет через Ticker.h. Это очень удобно и код простой.

  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.

У вас как планировщик работает?
Когда я использовал методы attach() и attach_ms(), у меня периодически падал контроллер, вываливая exception, поэтому почти все циклические вызовы в моём коде висят на attach_ms_scheduled(ms, callback);
И отвязка (остановка) — 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 делали?


Извините за глупые вопросы, я программист по состоянию души, а не по профессии.

Думаю… я бы вынес время/температуру/влажность как mode и показывал режим через switch/case — потому что у меня постоянный такт состояний 500, он перечитывает значения, передёргивает полусекунду, и отправляет значения на экран.
Запуски тикеров можно положить в отдельные методы.
// 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 );
}

Даже там где анонимные функции — всё равно вполне читаемо и работает

Спасибо за помощь. Очень даже читаемо. Буду сегодня пробовать. У меня похоже весь код на анонимных функциях. Даже не догадывался, что они так называются.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.