Чушь. Сочиняешь сказки какие-то.
Ну, мое дело маленькое - у меня работает как мне надо, а не как кому-то кажется ))
В концепции ждать действие до конца возможного третьего клика, а не выдавать в систему последовательно сигналы был один клик, было 2 клика, было 3 клика - вполне не сказка. А вот выдавать сигналы был один клик, было 2 клика когда нужно выдать только один сигнал было 3 клика это как то не вяжется со здравым смыслом.
ну, начать надо с того, что 3 клика уже не вяжутся со здравым смыслом
Правильно, надо паузы между ними анализировать и тогда получаем ритм-нажатия. Три быстрых, три медленных, быстро-медленное, медленно-быстрое. Кнопка-клавиша хорошо должна клацать, тогда на слух команды быстро запомнятся. Так вообще можно коды-нажатия делать (5-6 в серии) и кнопка будет слушаться только хозяина, чужой потому что не повторит.
Бабушка, а правда что вы рядом со стадионом Спартак живёте? Да, да, да-да-да!.
Было такое. Короткий одиночный по отжатию, длинный по времени, двойной не помню.)
Да.
Может ти-ти-та-та-та? “Я на горку шла?” Люди делают распознавание кода Морзе и ничё.)
Пипец ребята вас плющит
Правильно. Вот так и приходят умные мысли.)
Шеф по работе бывало СТОЛЬКО идей выдавал, я в шоке был.) Однако и с деньгами у него всё было ОК. А вы тут о двойном клике…)
Ага, поэтому у себя я больше двойного не отслеживаю, ибо ну его нафиг так извращаться ))
Ха. А я даже код Морзе отслеживал. У каждого свои причуды.) И маразмы.
У морзянки соотношение между длительностями сигналов и пауз определенное, так что технически это несложно (теоретически, на практике не пробовал ))
ваша плата принята, держите
volatile int button; // Значение кнопки
volatile unsigned long lastPressTime = 0; // Время последнего нажатия
const unsigned long doubleClickDelay = 300; // Максимальное время для двойного клика в миллисекундах
bool doubleClickDetected = false; // Флаг для двойного клика
void setup() {
Serial.begin(115200);
pinMode(2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), BUTTON, FALLING);
button = 0;
}
void loop() {
if (doubleClickDetected) {
Serial.println("Double Click Detected");
doubleClickDetected = false; // Сброс флага
} else if (button > 0) {
Serial.println("Single Click Detected");
button = 0; // Сброс счетчика
}
}
void BUTTON() {
unsigned long currentTime = millis();
if (currentTime - lastPressTime < doubleClickDelay) { // Если время между нажатиями меньше двойного клика, увеличиваем счетчик
button++;
if (button == 2) {
doubleClickDetected = true; // Обнаружен двойной клик
button = 0; // Сброс счетчика
}
} else { // Если время больше, это одиночный клик
button = 1; // Устанавливаем одиночный клик
}
lastPressTime = currentTime; // Обновляем время последнего нажатия
}
И тут BABOS принял платёж.) Не дождёшься.(
Но в реале все эти соотношения не выдерживаются. А в эфире, бывало, вообще хрен что поймёшь. Нужна не слабая сноровка.) Ну это специфика, как и во всём. Теория - одно, практика - другое.
// функция временной задержки с проверкой кнопки управления
void delay_(int T1)
{
static bool FL_KN=true;
Y1=millis();
while(millis()-Y1<T1){
if(digitalRead(KN)==HIGH&&!FL_KN){FL_KN=true;delay(200);}//
if(digitalRead(KN)==LOW&&FL_KN){//
delay(200);
if(digitalRead(KN)==HIGH){
FL_=false;
effekt++;//выбор - номер эффекта
if(effekt> max_eff){effekt=1;}
t=100;M=5;cvet=0;delay(200);
}
else{
cvet++;if(cvet>5){cvet=0;}//выбор компонент цвета
FL_KN=false;
}
}
}
}
Вот решил кнопкой с использованием delay сделать управление хоть бы по трём параметрам. Выше вариант отработки короткого нажатия (меньше 200 мс) и другого (больше 200 мс) на два параметра ёлки. Хочу добавить ещё длинное между ними. Сколько оно реально длится? Около 500 мс?
Вообще-то есть короткое и длинное нажатие. А у тебя еще более длинное намечается? ))
А это уже на усмотрение разработчика
ЗЫ: Возьми кнопочную библиотеку и не парься