Будильник рассвет
- Войдите на сайт для отправки комментариев
Добрый день!
Много буков, помогите советом.
Собрал схему, корпус для светильника, освещение за счет 8 метров rgb ленты, управление с IR пульта, все вприципе уже работает, но сейчас застрял на написании скетча: у светильника 5 режимов 1 - тусклый желтый(ночник), 2 - режим гирлянды, плавные переходы по теплым отенкам (для особых случаев ;-) ), 3 - просто лампа, белое свечение, 4 - плавный рассвет с переходом по цветам по таймеру (от бледно розового к максимально красному через желтый к белому), 5 - плавный закат, тоже что и рассвет в обратном порядке. Вобщем скетч не нравиться выкладывать не буду, режимы просто включаются нажатим кнопок с пульта, а задача стоит теперь немного другая: При включении, нажатие ON на пульте (от ТВ), (если выключено, то всеравно проверяем будильник и включаем рассвет) переходим в режим 1 на автомате, проверяем есть ли будильник во время работы - есть включаем его (4 режим) точнее плавно переходим к нему сначала уменьшая яркость выходя на страрт рассвета, если с пульта нажимается какойто другой режим также плавно переходим к нему, т.е. плавно уменьшая или увеличивая яркость СД до рабочей выбраного режима, регулировка яркости во всех режимах (кнопки громкости). НУ и при повторном нажатии ON. Плавно гасим все.
Мне не нужен готовый скетч мне интересно ваше мнение как бы вы решили задачу просто описав решение.
Дело с ардуино ни когда не имел мой первый опыт как с ардуино так и с электронникой вообще, давным-давно немного писал на РНР.
Мне не нужен готовый скетч мне интересно ваше мнение как бы вы решили задачу просто описав решение.
Извольте - я бы написал по процедуре под каждый режим и организовал бы их в простенький конечный автомат для запуска нужного режима и отслеживания нажатия кнопок.
Добрый день!
Много буков, помогите советом.
"как бы вы решили задачу просто описав решение."
распиши всё отдельными абзацами:
"При включении,
нажатие ON на пульте (от ТВ),
(если выключено, то всеравно проверяем будильник и включаем рассвет)
переходим в режим 1 на автомате,
проверяем есть ли будильник во время работы - есть включаем "
потом отредактируй (несколько раз) на русском,
а потом замени "если выключено" на "if (stat==0) {что-то делаем} и т.д.
Ещё хороший вариант: нарисуй блок-схему.
и вместо пульта можно сначала начать просто с кнопок
и вместо пульта можно сначала начать просто с кнопок
Поддерживаю, дебаг на кнопках, гораздо нагляднее, чем с глюками пульта. Да и заменить адресную ленту на простые диоды на этапе обкатки алгоритма можно... Там, конечно, использовать ШИМ для наглядности... А потом прикручивать поочереди ленту и пульт.
Я не использовал адресную ленту
освещение за счет 8 метров rgb ленты,
Я не использовал адресную ленту
обычная лента? ну тогда все знаяительно упрощается...
Не обычная, хотя как посмотреть ... обычная RGB лента, диод состоит (3-х) цветов, которые смешиваясь друг с другом дают 16 млн цветов, лента не адресная она может светится разными цветами, но вся целиком в один момент времени только одним цветом
Не обычная, хотя как посмотреть ... обычная RGB лента, диод состоит (3-х) цветов, которые смешиваясь друг с другом дают 16 млн цветов, лента не адресная она может светится разными цветами, но вся целиком в один момент времени только одним цветом
это и есть "обычная" RGB лента т.е. без контроллеров, управляется ШИМ по каждому каналу. Есть еще адресная RGB лента WS2812 и прочие аналогичные ленты.
А еще можно использовать лямда фунции. Повесить одну фунцию в loop и переключать ИК пультом на нужную лямда функцию режима.
А еще можно использовать лямда фунции. Повесить одну фунцию в loop и переключать ИК пультом на нужную лямда функцию режима.
Вот абсолютно верно. Я бы только так и делал)) Если бы знал как. Неужели ТС неинтересно самому решить? Меня раньше непосильные задачи очень увлекали, да и сейчас увлекают, хотя я давно в курсе, что непосильных задач нет. Бывает лень думать.
Квон новую книжку нашёл штоли... В эти ваши лямбды закидывать параметры через список аргументов-то можно или они все void/void ?
Нет, просто старый автомат Пуха под лямды приспособил и получилась ВЕЩЬ.
Нет, просто старый автомат Пуха под лямды приспособил и получилась ВЕЩЬ.
Эта вещь хоть быстрее работает, чем грязный Си? Или просто места больше занимает?
Вот возьмем стандарный скетч под ИК польт. http://robotclass.ru/tutorials/arduino-ir-remote-control/
#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: digitalWrite( 13, HIGH ); break; case 0xFFE01F: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду } }Замечательно. Но работает со статическими объектами Вкл-выкл. Может и динамическими но их долго надо описывать. А если взять автомат с лямдой, то накорядать и отладить скетч можно быстро.
/**/ #include "IRremote.h" IRrecv irrecv(/*пин*/2); // указываем вывод, к которому подключен приемник decode_results results; typedef void (*pDo)(); pDo run = {}; const byte ledPin = 13; enum state_t {sOFF, sON, sblinkOFF, sblinkON}; void stand(state_t s) { static unsigned long past; past = millis(); switch (s) { case sOFF: digitalWrite( ledPin, LOW ); run = [] {}; break; case sON: digitalWrite( ledPin, HIGH ); run = [] {}; break; case sblinkOFF: digitalWrite( ledPin, LOW ); run = [] {if (millis() - past >= 500)stand(sblinkON );} ; break; case sblinkON: digitalWrite( ledPin, HIGH ); run = [] {if (millis() - past >= 500)stand(sblinkOFF );} ; break; }//switch } //----------------------------------------------- void setup() { pinMode(ledPin, OUTPUT); irrecv.enableIRIn(); // запускаем прием } void loop() { run (); if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: stand(sOFF);// выключить break; case 0xFFE01F: stand(sblinkON);//помигать break; } irrecv.resume(); // принимаем следующую команду } }Ясно, понятно.