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

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

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

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

b707
Онлайн
Зарегистрирован: 26.05.2017

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

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

b707
Онлайн
Зарегистрирован: 26.05.2017

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

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

b707 пишет:

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

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

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

b707 пишет:

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

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

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

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Вот тебе кнопка квона, поправишь 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); //Экземпляр обработчика для кнопки

 

Бармалей
Бармалей аватар
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.