Управление реле по радиоканалу.
- Войдите на сайт для отправки комментариев
Сб, 07/01/2017 - 21:04
Добрый день. Нужна помощь. Нужно чтобы при нажатии на пульте кнопки, реле замыкалось, а при повторном реле размыкалось. Как это реализовать не знаю. Пока получилься такой код.
const int Rel1=10;
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
digitalWrite(Rel1, HIGH);
pinMode(Rel1, OUTPUT);
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("Unknown encoding");
} else {
Serial.println( mySwitch.getReceivedValue() );
if(mySwitch.getReceivedValue()==7551673){Serial.print(" pir1 komnata "); }
else if(mySwitch.getReceivedValue()==1326849){digitalWrite(Rel1, LOW);} // 1-е реле вкл
else {Serial.print("EROR");}
}
mySwitch.resetAvailable();
}
}
Если у вас это https://goo.gl/Dn53EO. то библиотека точно лишняя.
А как тогда?
Сделал то что хотел, но при нажатии на другие кнопки реле срабатывает (коды этих кнопок совершенно другие). Вот что получилось
const int Rel1=8; uint8_t flagA, flagB; #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { pinMode(Rel1, OUTPUT); Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { int value = mySwitch.getReceivedValue(); if (value == 0) { Serial.print("Unknown encoding"); } else { Serial.println( mySwitch.getReceivedValue() ); if(mySwitch.getReceivedValue()==7551673){Serial.print(" pir1 komnata ");} else if(mySwitch.getReceivedValue()==1326849)flagA = !flagA; // 1-е реле else {Serial.print("EROR");} if(flagA) { digitalWrite(Rel1,1); flagA = !flagA; } else { digitalWrite(Rel1,0); flagA = !flagA; } } mySwitch.resetAvailable(); } }Так а чего Вы хотели. Оно у Вас должно срабатывать по условию в строке 25, так. А Вы срабатывание вытащили в строки 27-38, которые от условия никак не зависят. Вот она у Вас и срабатывает по любой кнопке.
#define Rel1 8 #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { pinMode(Rel1, OUTPUT); Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { unsigned long value = mySwitch.getReceivedValue(); Serial.print(value); switch (value) { case 0: Serial.println(" - Unknown encoding"); break; case 7551673: Serial.println(" - pir1 komnata "); break; case 1326849: digitalWrite(Rel1, !digitalRead(Rel1)); break; default: Serial.println(" - EROR"); } mySwitch.resetAvailable(); } }#define Rel1 8 #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { pinMode(Rel1, OUTPUT); Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { unsigned long value = mySwitch.getReceivedValue(); Serial.print(value); switch (value) { case 0: Serial.println(" - Unknown encoding"); break; case 7551673: Serial.println(" - pir1 komnata "); break; case 1326849: digitalWrite(Rel1, !digitalRead(Rel1)); break; default: Serial.println(" - EROR"); } mySwitch.resetAvailable(); } }Спасибо большое. Всё работает).
Как при нажатии и удержинии кнопки любое время получить только 1 включение реле,
а при повторном нажатии и удержании кнопки любое время - 1 выключение реле ???
1. Побороть дребезг, чтобы левые сигналы не пёрли.
2. Реализовать следующую логику:
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int led = 12; void setup() { pinMode(12, OUTPUT); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { unsigned long value = mySwitch.getReceivedValue(); Serial.print(value); switch (value) { case 0: Serial.println(" - Unknown encoding"); break; case 2276802: digitalWrite(led, !digitalRead(led)); break; default: Serial.println(" - EROR"); } mySwitch.resetAvailable(); } }Евгений П
Что там насчет вечного цикла, а то я две недели, как ардуинщик.
При удержании кнопки на радиопульте с приемника периодически поступает код ( в моем случае
case2276802)и диод (реле и т.д.) блин мигает постоянно, а нужно, что бы хоть при однократном хоть при длительном нажатии кнопки пульта - реле(диод) включилось При повторном однократном (либо длительном) нажатии этой кнопки пульта -выключилось.Вечный цикл? Ну, например, функция loop - она вечно вызывается.
чет вот бы по доступней кок то?
То, что написано между "ВЕЧНЫЙ ЦИКЛ" и "КОНЦЕ ЦИКЛА" нужно выполнять бесконечное количество раз. Например, функция loop постоянно бесконечно вызывается. Так что можно все это запихнуть в неё.
Евгений
Вот все вокруг, да около ... туговато пока для меня это все В виде куска счетча никаку что-ли?
Не, никак. В виде куска скетча спросите вот здесь.
Как при нажатии и удержинии кнопки любое время получить только 1 включение реле,
а при повторном нажатии и удержании кнопки любое время - 1 выключение реле ???
Тоже очень удобная вещь. А то поставил на открывание гаража, бывает жмёшь Реле включается и тут же выключается, иногда выбешивает.
Евгений
Вот все вокруг, да около ... туговато пока для меня это все В виде куска счетча никаку что-ли?
Отрежь кусок да полож, хорошо что не требуют заливать в дуню за себя.
Для тс: Вам написали алгаритм при котором длительное нажатие не обрабатывается так как происходит обработка в момент смены состояния кнопки. Можете посде срабатывания реле добавить определенное время в течении которого реле будет невосприимчево к нажатиям