доброго времени. 3-й день ломаю голову и не могу написать скетч правильно. Имеется одна кнопка и три светодиода на разных пинах. Алгоритм: если нажал один раз 1-й светодиод двойное нажатие 2-й светодиод тройное нажатие 3-й светодиод Между нажатиями определил 200 миллисекунд ( как в мышке от компьютера) то есть за 600 миллисекунд нужно определить сколько было нажатий, я так понимаю. Использую millis, но ничего не получается, может можно где-то подсмотреть или наработка есть, помогите пожалуйста.
Код (C++): #include <Bounce2.h> #define BUTTON_PIN 2 #define TWO_CLK 200 #define THREE_CLK 600 // Создаем экземпляр объекта Bounce: Bounce debouncer = Bounce(); long start = 0; long nclk = 0; void setup() { // Задаем кнопку со встроенным подтягивающим резистором: pinMode(BUTTON_PIN,INPUT_PULLUP); // Настроив кнопку, настраиваем экземпляр Bounce: debouncer.attach(BUTTON_PIN); debouncer.interval(5); // интервал в миллисекундах } void loop() { if( start >0 && ( (millis() - start)>THREE_CLK)) { switch(nclk) { case 1: Serial.println("1"); break; case 2: Serial.println("2");break; case 3: Serial.println("3");break; default: Serial.println("АЛАРМ! АЛАРМ! ВОЛК УНЕС ЗАЙЧАТ!!!"); break; } nclk = 0; start = 0; } debouncer.update(); int value = debouncer.read(); if(value && nclk <3){ nclk++; start = millis(); } }
Я извиняюсь, но либо я что-то неправильно делаю или код нерабочий, и на меге и уно пробовал - ничего.
да, кажись понял в чем ошибка. при нажатии кнопка укладывает пин на ноль, а я наоборот написал, что поднимает
Код (C++): #include <Bounce2.h> #define BUTTON_PIN 2 #define TWO_CLK 200 #define THREE_CLK 600 // Создаем экземпляр объекта Bounce: Bounce debouncer = Bounce(); long start = 0; // время первого нажатия long nclk = 0; //количество нажатий void setup() { // Задаем кнопку со встроенным подтягивающим резистором: pinMode(BUTTON_PIN,INPUT_PULLUP); // Настроив кнопку, настраиваем экземпляр Bounce: debouncer.attach(BUTTON_PIN); debouncer.interval(5); // интервал в миллисекундах } void loop() { //если было первое нажатие, и сейчас время позже чем интервал трех нажатий if( start >0 && ( (millis() - start)>THREE_CLK)) { //делаем действо в зависимости от количества нажатий switch(nclk) { case 1: Serial.println("1"); break; case 2: Serial.println("2");break; case 3: Serial.println("3");break; default: Serial.println("АЛАРМ! АЛАРМ! ВОЛК УНЕС ЗАЙЧАТ!!!"); break; } nclk = 0; //сбрасываем количество нажатий и время начала регистрации нажатий start = 0; } debouncer.update(); int value = debouncer.read();// считали состояние кнопки с фильтрацией дребезга // кнопку придавили к земле(нажали) и количество нажатий меньше 3 if(value==0 && nclk <3){ nclk++; // увеличиваем количество нажатий if (start == 0) // если еще не установили время первого нажатия то установим { start = millis(); } } }