Добрый день, теребуется помощь, нужно создать 4 независимых триггера, нужно на ардуино, хочу задействовать дистанционное управление освещением по радиоканалу, есть 6 комплектов радиомодулей, но они без так называемой защелки, т.е., нагрузка включена пока удерживаешь нажатой кнопку на пульте. Нужно реализовать что бы при поступлении короткого импульса логической 1 на вход ардуино, на выходе появлялась постоянная 1, при повторном поступлении лог. 1 на вход ардуино, на выходе лог. 1 сменялась на лог. 0. и таких 4 канала надо.
Я тут набрасал примерно то что нужно, код работает, но сыро, как сделать так, что бы при удержании кнопки одна и та же команда не повторялась постоянно int LedPin1=13; int LedPin2=12; int LedPin3=11; int LedPin4=10; int ButPin1=2; int ButPin2=3; int ButPin3=4; int ButPin4=5; void setup() { pinMode(LedPin1, OUTPUT); pinMode(LedPin2, OUTPUT); pinMode(LedPin3, OUTPUT); pinMode(LedPin4, OUTPUT); } void loop() { if(digitalRead(ButPin1)==HIGH) { digitalWrite(LedPin1, !digitalRead(LedPin1)); delay(500); } if(digitalRead(ButPin2)==HIGH) { digitalWrite(LedPin2, !digitalRead(LedPin2)); delay(500); } if(digitalRead(ButPin3)==HIGH) { digitalWrite(LedPin3, !digitalRead(LedPin3)); delay(500); } if(digitalRead(ButPin4)==HIGH) { digitalWrite(LedPin4, !digitalRead(LedPin4)); delay(500); } }
Код (C++): #define LedPin1 13 #define LedPin2 12 #define LedPin3 11 #define LedPin4 10 #define ButPin1 2 #define ButPin2 3 #define ButPin3 4 #define ButPin4 5 bool channel_1=false; bool channel_2=false; bool channel_3=false; bool channel_4=false; bool state_1; bool state_2; bool state_3; bool state_4; bool is_pushed1=false; bool is_pushed2=false; bool is_pushed3=false; bool is_pushed4=false; void setup() { pinMode(LedPin1, OUTPUT); pinMode(LedPin2, OUTPUT); pinMode(LedPin3, OUTPUT); pinMode(LedPin4, OUTPUT); pinMode(ButPin1, INPUT); pinMode(ButPin2, INPUT); pinMode(ButPin3, INPUT); pinMode(ButPin4, INPUT); } void loop() { state_1=digitalRead(ButPin1); state_2=digitalRead(ButPin2); state_3=digitalRead(ButPin3); state_4=digitalRead(ButPin4); if (state_1 && !is_pushed1) { channel_1=!channel_1; is_pushed1=true; } else { is_pushed1=false; } if (state_2 && !is_pushed2) { channel_2=!channel_2; is_pushed2=true; } else { is_pushed2=false; } if (state_3 && !is_pushed3) { channel_3=!channel_3; is_pushed3=true; } else { is_pushed3=false; } if (state_4 && !is_pushed4) { channel_4=!channel_4; is_pushed4=true; } else { is_pushed4=false; } digitalWrite(LedPin1, channel_1); digitalWrite(LedPin2, channel_2); digitalWrite(LedPin3, channel_3); digitalWrite(LedPin4, channel_4); delay(500); } Теперь команда не будет отправлятся до тех пор, пока не будет отжата кнопка.