rcswitch автоповтор
- Войдите на сайт для отправки комментариев
Втр, 14/02/2017 - 17:55
Принимаю код от брелка через библиотеку rcswitch. Проблема в том, что при разовом нажатии кнопки приходят 2 и более одинаковых значений кода. Как сделать чтоб при одинарном нажатии фиксировалось одно значение?
Придёт в любом случае столько, сколько пошлёт Вам брелок и на это Вы повлиять не можете. Всё, что Вы можете - лишнее игнорировать, например, если пришло "тоже самое" и интервал времени не превысил некоторого порогового, то считать это "дребезгом" и игнорировать.
Придёт в любом случае столько, сколько пошлёт Вам брелок и на это Вы повлиять не можете. Всё, что Вы можете - лишнее игнорировать, например, если пришло "тоже самое" и интервал времени не превысил некоторого порогового, то считать это "дребезгом" и игнорировать.
Можно в коде увидеть? :)
Напишите - увидите. А если не будет получаться, выкладывайте, поможем.
void loop() { if (mySwitch.available() && millis() - time > debounce) { val=mySwitch.getReceivedValue(); Serial.println( val ); time = millis(); } mySwitch.resetAvailable(); }пока только так, но не особо помогает
Ну, я не знаю что здесь написано, описаний переменных нет, инициализации нет, Бог его знает о чём это.
#include <RCSwitch.h> long time = 0; long debounce = 300; long val=0; RCSwitch mySwitch = RCSwitch(); // code // left 1832402 // right 1832404 // two 1832406 //------------------------------------------ void setup() { Serial.begin(19200); mySwitch.enableReceive(0); // D2 pin } //------------------------------------------ void loop() { if (mySwitch.available() && millis() - time > debounce) { val=mySwitch.getReceivedValue(); Serial.println( val ); time = millis(); } mySwitch.resetAvailable(); }Вы читали, что я писал в посте №1 или я зря пальцы бил?
Вы должны
1. принять сигналэ
2. сравнить с предыдущим
3. Если не равно. то обрабатывать новый сигнал (и запомнить его, т.к. в следующий раз он станет предыдущим)
4. Если же равно, то посмотреть сколько времени прошло с принятия предыдцщего. если больше порогоа, то считать это новым сигналом, а если меньше, то просто запомнить время для дальнгейшего сравнения.
Вот это и напишите прямо построчно, комменятирую строки.
Помогли бы кодом и пальцы не пришлось бы бить
Понимаете, я готов помочь тому, кто делает сам. Ведь то, что писал как надо делать - это же тоже помощь. Если же нужно просто сделать для Вас код, то ... это не ко мне ... Бесплатно делать - с чего бы? За разумные деньги - не хочу, мне не надо. А за неразумные Вы не согласитесь, т.к. просчитаете это грабежом и будете правы.
Но Вы зайдите в раздел "Ищу исполнителя", там есть ребята и они сделают.
/* */ #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); long read() { long val = 0; if (mySwitch.available()) { val = mySwitch.getReceivedValue(); mySwitch.resetAvailable(); } return val; }; long val; long val_old; bool debounce; const long code_left = 1832402; const long code_right = 1832404; const long code_two = 1832406; void func_left() { Serial.println( "func_left" ); }; void func_right() { Serial.println( "func_right" ); }; void func_two() { Serial.println( "func_two" ); }; //------------------------------------------ void setup() { Serial.begin(19200); mySwitch.enableReceive(0); // D2 pin val_old = read(); debounce = 0; } //------------------------------------------ void loop() { static uint32_t past = 0; val = read(); if (val != 0 && !debounce) { debounce = 1; past = millis(); if ( val_old == 0) { if (val == code_left) { func_left(); } if (val == code_right) { func_right(); } if (val == code_two) { func_two(); } } } if (debounce && past - millis() > 500) { debounce = 0; } val_old = val; }а я так принимаю )))
#include "IRremote.h" IRrecv irrecv(11); // Указываем пин, к которому подключен приемник decode_results results; long keyCode; unsigned long last = millis(); void setup() { Serial.begin(9600); // Выставляем скорость COM порта irrecv.enableIRIn(); // Запускаем прием } void loop() { /* if (irrecv.decode(&results)) // Если данные пришли { Serial.println(results.value, HEX); // Отправляем полученную данную в консоль irrecv.resume(); // Принимаем следующую команду } */ if (irrecv.decode(&results)) { if (millis() - last > 250) { keyCode = results.value; Serial.println(keyCode, HEX); } last = millis(); irrecv.resume(); } }qwone, автоповтор работает :(
ua6em, спасибо!!!! то что нужно! тема закрыта
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); unsigned long last = millis(); void func_left() { Serial.println( "func_left" ); }; void func_right() { Serial.println( "func_right" ); }; void func_two() { Serial.println( "func_two" ); }; //------------------------------------------ void setup() { Serial.begin(19200); mySwitch.enableReceive(0); // D2 pin } //------------------------------------------ void loop() { if (mySwitch.available()) { if (millis() - last > 250) { switch (mySwitch.getReceivedValue()) { case 1832402: func_left(); break; case 1832404: func_right(); break; case 1832406: func_two(); break; } } last = millis(); mySwitch.resetAvailable(); } }ua6em, спасибо!!!! то что нужно! тема закрыта
Не за что!
Я сам буквально с августа только учусь )))