Управление RGB-светодиодом по сенсорной кнопке
- Войдите на сайт для отправки комментариев
Уважаемые соратники, требуется помощь. Нужен скетч по управлению RGB-светодиодом для arduino по нажатию сенсорной кнопки. Режим такой: Первое нажатие - включается режим смены рандомного цвета по кругу, без плавных переходов, задержка каждого цвета -2с; Второе нажатие - запоминаем последний цвет, просто горим им. Последующие нажатия - смена цвета на рандомный (смена цвета по нажатию). Нажатие и удержание (2с) - выкл.
Сам сваял два скетча, один работает по двойному клику, второй по короткому и длинному удержанию, а вот с переходом с цикла на горение последнего запомненного и последующих рандомных по одинарному короткому клику не получается. Скетчи могу предоставить, задонатить тоже. Срочно, курсач горит :(
Задонатить в любом случае придется, ибо вы написали в платный раздел. И точно не 200руб
Если ценник от 1000 устроит - могу взяться
не, не возьмусь
не, не возьмусь
" Мишка стал какой-то переменчивый..." из народного фольклора
Задонатить в любом случае придется, ибо вы написали в платный раздел. И точно не 200руб
Если ценник от 1000 устроит - могу взяться
Да я в общем и не рассчитывал на халяву)) 2 недели бился сам, 2 сценария реализовал, но не совсем то что надо. Потому и обращаюсь. Забыл добавить, rgb-светодиод не адресный, с общим катодом.
Вот тебе кнопка квона, поправишь 500 на 2000, это будет длинное нажатие
/*** Обработчик кнопки ***/ //------Cl_Btn---------------------- enum {sbNONE = 0, sbClick, sbLong}; /*состояние не изменилось/клик/долгое нажатие*/ class Cl_Btn { protected: const byte pin; byte state; bool bounce = 0; bool btn = 1, oldBtn; unsigned long past; const uint32_t time = 500 ; bool flag = 0; uint32_t past_flag = 0 ; public: Cl_Btn(byte p): pin(p) {} /*инициализация-вставить в setup()*/ void init() { pinMode(pin, INPUT_PULLUP); } /*работа-вставить в loop()*/ void run() { state = sbNONE; bool newBtn = digitalRead(pin); if (!bounce && newBtn != btn) { bounce = 1; past = mill; } if (bounce && mill - past >= 10) { bounce = 0 ; oldBtn = btn; btn = newBtn; if (!btn && oldBtn) { flag = 1; past_flag = mill; } if (!oldBtn && btn && flag && mill - past_flag < time ) { flag = 0; state = sbClick; } } if (flag && mill - past_flag >= time ) { flag = 0; state = sbLong; } } byte read() { return state; } }; Cl_Btn Btn2(/*пин*/BUTTON_ENCODER); //Экземпляр обработчика для кнопкинапишу
nemohack@yandex.ru
Что значит "рандомного цвета по кругу"?
светодиод круглый
Непрерывный спектр знаю, но тут цвет без плавных переходов - это сколько цветов?
255х255х255 = 16581375
ua6em Спасибо, но у меня проблема именно с выходом из цикла по короткому нажатию. Скетчи делал как раз на подобном примере.
По кругу имеется в виду в цикле. Цвет рандомный в виде подачи шим random(0-255) на каждый канал в каждой интерации цикла.
255х255х255 = 16581375 * 2 секунды)))
white4spirit73, пиcните htpicc@gmail.com. Вижу вы не лодырь.)
Уточните два момента.
1. Кнопка сенсорная - но это предполагает работу по ёмкости, сопротивлению и т.д. Тут в скетче вижу digitalRead, т.е. кнопка должна менять потенциал ноги MCU. Уточните, какая всё таки будет кнопка.
2. ШИМ у Вас должен быть аппаратный или программный?
Вообще распишите техзадание подробнее, чтобы можно было определиться с объёмом работы, ну заодно и какие косяки у Вас были (что не получилось).
Уточните два момента.
1. Кнопка сенсорная - но это предполагает работу по ёмкости, сопротивлению и т.д. Тут в скетче вижу digitalRead, т.е. кнопка должна менять потенциал ноги MCU. Уточните, какая всё таки будет кнопка.
2. ШИМ у Вас должен быть аппаратный или программный?
Вообще распишите техзадание подробнее, чтобы можно было определиться с объёмом работы, ну заодно и какие косяки у Вас были (что не получилось).
Скетч уже в разработке У Бармалей, спасибо за участие!
Кнопка типа TTP223 c режимом триггера, с запаянной А перемычкой, дает 1 в режиме покоя и 0 при нажатии.
ШИМ аппаратный стандартный для arduino.