Всем привет! Есть две ардуины, на одной передатчик, на другой приемник. С передатчика пока нажата кнопка идет сигнал, с кодом 0x110, приемник его считывает и выводит значение переменной статуса.Как только сигнал пропадает или изменяется - переменная меняет свое значение. У меня почему то постоянно переменная равна 0. Передатчик работает, выдает такой код 0x84619D06. Проверял. Передатчик Код (C++): #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); irsend.enableIROut(38); } void loop() { irsend.sendNEC(110, 9); Serial.println("OK!"); delay(500); } Приемник: Код (C++): #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } int i = 0; volatile uint8_t flag = 0; #define S 0x84619D06 void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); switch (results.value) { case(S): i = 1; break; default: i = 0; break; } irrecv.resume(); } Serial.println(flag); }
Код (C++): irsend.sendNEC(110, 9); Вопрос: какой код здесь посылается? Код (C++): case(S): Второй вопрос: какой код здесь проверяется? И после этого вы хотите, чтобы переменная i меняла значение?
Код принимается такой: Код (C++): #define S 0x84619D06 Отправляется такой - 110: Код (C++): irsend.sendNEC(110, 9);
Отправляю 0x110 Код (C++): #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); irsend.enableIROut(38); } void loop() { irsend.sendNEC(110, 9); Serial.println("OK!"); delay(500); } И сравниваю с этим значением Код (C++): #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } int i = 0; volatile uint8_t flag = 0; #define S 0x110 void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); switch (results.value) { case(S): i = 1; break; default: i = 0; break; } irrecv.resume(); }
Ну, а в сериал что пишет? что реально принимаеца-то? Чо из тебя всё под пытками вытягивать приходится?
Обращаю внимание, что 110 и 0x110 - это разные числа. Вы отправляете 110, а сравниваете с 0x110, т.е., в десятичной системе - с 272. Ну самые основы же ж, блин.
Отправляю 0х110, сравниваю с 272. Так же не работает условие if. Вывожу принятые данные в терминал - пишет большое число.
Тогда забейте, раз не способны разобраться в простейшем сравнении двух чисел. У вас есть код, который пришёл (вы его выводите в Serial) - достаточно сравнить с ним: Код (C++): #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } int i = 0; volatile uint8_t flag = 0; #define S 0x925426D3 //2454988499 void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); switch (results.value) { case(S): i = 1; break; default: i = 0; break; } irrecv.resume(); }