Управление RGB-светодиодом по сенсорной кнопке

white4spirit73
Offline
Зарегистрирован: 28.10.2020

Уважаемые соратники, требуется помощь. Нужен скетч по управлению RGB-светодиодом для arduino по нажатию сенсорной кнопки. Режим такой: Первое нажатие - включается режим смены рандомного цвета по кругу, без плавных переходов, задержка каждого цвета -2с; Второе нажатие - запоминаем последний цвет, просто горим им. Последующие нажатия - смена цвета на рандомный (смена цвета по нажатию). Нажатие и удержание (2с) - выкл.

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

b707
Offline
Зарегистрирован: 26.05.2017

Задонатить в любом случае придется, ибо вы написали в платный раздел. И точно не 200руб

Если ценник от 1000 устроит - могу взяться

b707
Offline
Зарегистрирован: 26.05.2017

не, не возьмусь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

не, не возьмусь

" Мишка стал какой-то переменчивый..." из народного фольклора

white4spirit73
Offline
Зарегистрирован: 28.10.2020

b707 пишет:

Задонатить в любом случае придется, ибо вы написали в платный раздел. И точно не 200руб

Если ценник от 1000 устроит - могу взяться

Да я в общем и не рассчитывал на халяву)) 2 недели бился сам, 2 сценария реализовал, но не совсем то что надо. Потому и обращаюсь. Забыл добавить, rgb-светодиод не адресный, с общим катодом.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Вот тебе кнопка квона, поправишь 500 на 2000, это будет длинное нажатие
 

01/*** Обработчик кнопки ***/
02//------Cl_Btn----------------------
03enum {sbNONE = 0, sbClick, sbLong}; /*состояние не изменилось/клик/долгое нажатие*/
04class Cl_Btn {
05  protected:
06    const byte pin;
07    byte state;
08    bool bounce = 0;
09    bool btn = 1, oldBtn;
10    unsigned long past;
11    const uint32_t time = 500 ;
12    bool flag = 0;
13    uint32_t past_flag = 0 ;
14  public:
15    Cl_Btn(byte p): pin(p) {}
16    /*инициализация-вставить в setup()*/
17    void init() {
18      pinMode(pin, INPUT_PULLUP);
19    }
20    /*работа-вставить в loop()*/
21    void run() {
22      state = sbNONE;
23      bool newBtn = digitalRead(pin);
24      if (!bounce && newBtn != btn) {
25        bounce = 1;
26        past = mill;
27      }
28      if (bounce && mill - past >= 10) {
29        bounce = 0 ;
30        oldBtn = btn;
31        btn = newBtn;
32        if (!btn && oldBtn) {
33          flag = 1;
34          past_flag = mill;
35        }
36        if (!oldBtn && btn && flag && mill - past_flag < time ) {
37          flag = 0;
38          state = sbClick;
39        }
40      }
41      if (flag && mill - past_flag >= time ) {
42        flag = 0;
43        state = sbLong;
44      }
45    }
46    byte read() {
47      return state;
48    }
49};
50Cl_Btn Btn2(/*пин*/BUTTON_ENCODER); //Экземпляр обработчика для кнопки

 

Бармалей
Бармалей аватар
Offline
Зарегистрирован: 23.09.2019

напишу

 

Kunak666
Offline
Зарегистрирован: 10.10.2020
Green
Offline
Зарегистрирован: 01.10.2015

Что значит "рандомного цвета по кругу"?

Бармалей
Бармалей аватар
Offline
Зарегистрирован: 23.09.2019

светодиод круглый 

Green
Offline
Зарегистрирован: 01.10.2015

Непрерывный спектр знаю, но тут цвет без плавных переходов - это сколько цветов?

Бармалей
Бармалей аватар
Offline
Зарегистрирован: 23.09.2019

255х255х255 = 16581375

white4spirit73
Offline
Зарегистрирован: 28.10.2020

ua6em Спасибо, но у меня проблема именно с выходом из цикла по короткому нажатию. Скетчи делал как раз на подобном примере. 

По кругу имеется в виду в цикле. Цвет рандомный в виде подачи шим random(0-255) на каждый канал в каждой интерации цикла.

Green
Offline
Зарегистрирован: 01.10.2015

255х255х255 = 16581375 * 2 секунды)))
white4spirit73, пиcните htpicc@gmail.com. Вижу вы не лодырь.)

Kunak666
Offline
Зарегистрирован: 10.10.2020

Уточните два момента.

1. Кнопка сенсорная - но это предполагает работу по ёмкости, сопротивлению и т.д. Тут в скетче вижу digitalRead, т.е. кнопка должна менять потенциал ноги MCU. Уточните, какая всё таки будет кнопка.

2. ШИМ у Вас должен быть аппаратный или программный?

Вообще распишите техзадание подробнее, чтобы можно было определиться с объёмом работы, ну заодно и какие косяки у Вас были (что не получилось).

white4spirit73
Offline
Зарегистрирован: 28.10.2020

Kunak666 пишет:

Уточните два момента.

1. Кнопка сенсорная - но это предполагает работу по ёмкости, сопротивлению и т.д. Тут в скетче вижу digitalRead, т.е. кнопка должна менять потенциал ноги MCU. Уточните, какая всё таки будет кнопка.

2. ШИМ у Вас должен быть аппаратный или программный?

Вообще распишите техзадание подробнее, чтобы можно было определиться с объёмом работы, ну заодно и какие косяки у Вас были (что не получилось).

Скетч уже в разработке У Бармалей, спасибо за участие!

Кнопка типа TTP223 c режимом триггера, с запаянной А перемычкой, дает 1 в режиме покоя и 0 при нажатии.

ШИМ аппаратный стандартный для arduino.