Делаю управление робота на ардуино с пульта на ардуино. Мне надо по ИК каналу передать какой-то код, из которого я смогу вытащить два значения от 0 до 1023. Как вариант - отправлять 8-ми значное число. Первые четыре цифры - первое значение, другие - второе. Принимающее устройство должно принять этот сигнал и в зависимости от значений первого и второго датчиков что-то сделать. Проблема в том, что до принимающей ардуины доходит сигнал, совершенно не совпадающий с реальным. Подскажите, кто знает, как исправить? Код отправляющей части: Код (C++): #include <IRremote.h> IRsend irsend; void setup() { pinMode(A0, INPUT); pinMode(A1, INPUT); } void loop() { int a1 = analogRead(A0) * 10000; int a2 = analogRead(A1); int a3 = a1 + a2; irsend.sendNEC(a3, 32); delay(200); } и принимающей: Код (C++): #include <IRremote.h> IRrecv irrecv(A0); decode_results results; void setup() { irrecv.enableIRIn(); Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) { irrecv.resume(); Serial.print((results.value - results.value % 10000) / 10000); Serial.print(' '); Serial.println(results.value % 10000); } } Заранее спасибо!
Два 'int' без потери данных нужно упаковывать в 'long': Код (C++): #include <IRremote.h> IRsend irsend; void setup() { pinMode(A0, INPUT); pinMode(A1, INPUT); } void loop() { int a1 = analogRead(A0); int a2 = analogRead(A1); long a3 = a1 + a2 * 0x10000; irsend.sendNEC(a3, 32); delay(200); } Вот только не знаю как к 'long' отнесётся функция 'sendNEC'. Аналогично необходимо доработать приёмную часть.
Спасибо, но это не помогло. Решил проблему другим способом: Отправитель Код (C++): #include <IRremote.h> IRsend irsend; void setup() { pinMode(A0, INPUT); pinMode(A1, INPUT); } void loop() { int a1 = analogRead(A0); int a2 = analogRead(A1); irsend.sendNEC(a1, 32); delay(50); irsend.sendNEC(a2 + 2000, 32); delay(50); } Приемник Код (C++): #include <IRremote.h> IRrecv irrecv(A0); decode_results results; void setup() { // put your setup code here, to run once: irrecv.enableIRIn(); Serial.begin(9600); } int a1 = 0; int a2 = 0; void loop() { // put your main code here, to run repeatedly: if (irrecv.decode(&results)) { irrecv.resume(); int a = results.value; if (a >= 2000) { a1 = a - 2000; } else { a2 = a; } Serial.print(a1); Serial.print(' '); Serial.println(a2); } }