1. Есть UNO 1шт 2. Шилдовские реле 4х канальные 4 шт 3. приемник 433 частоты 4. 4 пульта RF ( 10 кнопочные) С одинаковыми кодами) ( коды известны) Code: 57759, period duration: 410us. Code: 57760, period duration: 410us. Code: 57758, period duration: 410us. Code: 57771, period duration: 410us. Code: 57756, period duration: 410us. Code: 57754, period duration: 410us. Code: 57779, period duration: 410us. Code: 57757, period duration: 410us. Code: 57772, period duration: 410us. Code: 57777, period duration: 410us. Функционал простой первые 7 кнопок должны работать: 1 раз нажали ( реле вкл на 1 секунду и выключилось) ПРИ УДЕРЖАНИ РЕЛЕ ДОЛжНО БЫТЬ В ЗАМКНУТОМ СОСТОЯНИИ, пока не отпустим кнопку. 8 и 9 и 10 кнопка 1 раз нажали ( реле вкл на 1 секунду и выключилось)
Смотри: при однократном нажатии код приходит однократно (считаем так для простоты). При удержании - код постоянно приходит, через какие-то промежутки времени (заведомо меньше секунды). Вывод: при любом получении кода обнуляем таймер выключения реле (переменная) - и всё. В псевдокоде: Код (C++): typedef struct { unsigned long clickTime; bool isRelayOn; } ButtonState; ButtonState button1State; void loop() { if(button1CodeReceived) // если получен код для первой кнопки { button1State.clickTime = millis(); // обнуляем таймер if(!button1State.isRelayOn) // если реле уже не включено { // включаем реле для кнопки 1 digitalWrite(pin,level); button1State.isRelayOn = true; // сохраняем флаг включения реле } } // если включено реле и оно секунду работает - выключаем if(button1State.isRelayOn && millis() - button1State.clickTime > 1000) { button1State.isRelayOn = false; // сбрасываем флаг включения реле // выключаем реле digitalWrite(pin,level); } } Для остальных кнопок - аналогично, лучшим вариантом будет завести массив из N элементов ButtonState, и в цикле рулить/проверять.