Wie man richtig empfangen und senden von IR-Daten von Arduino
Folgendes ist mein code zum Lesen der IR-Daten von Arduino:
#define sprint Serial.print
#define sprintln Serial.println
#include <IRremote.h>
#define IR_RCVR_PIN 11
IRrecv ir_receiver(IR_RCVR_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
ir_receiver.enableIRIn(); //Start the receiver
}
void loop() {
if (ir_receiver.decode(&results)) {
dump(&results);
ir_receiver.resume(); //Receive the next value
}
}
int c = 1;
void dump(decode_results *results) {
int count = results->rawlen;
sprintln(c);
c++;
sprintln("For IR Scope: ");
for (int i = 1; i < count; i++) {
sprint("0x");
sprint((unsigned int)results->rawbuf[i], HEX);
sprint(" ");
}
sprintln("");
sprintln("For Arduino sketch: ");
sprint("unsigned int raw[");
sprint(count, DEC);
sprint("] = {");
for (int i = 1; i < count; i++) {
sprint("0x");
sprint((unsigned int)results->rawbuf[i], HEX);
sprint(",");
}
sprint("};");
sprintln("");
sprint("irsend.sendRaw(raw,");
sprint(count, DEC);
sprint(",38);");
sprintln("");
sprintln("");
}
Verwenden, die ich bekommen kann, diese von einem remote-controller:
1
For IR Scope:
0x47 0x1F 0xB 0x17 0xA 0x17 0xB 0x6 0xA 0x6 0xB 0x6 0xA 0x17 0xB 0x6 0xA 0x6 0xB 0x17
0xA 0x17 0xA 0x7 0xA 0x17 0xA 0x7 0xA 0x6 0xB 0x17 0xA 0x17 0xA 0x6 0xB 0x17 0xA 0x17
0xB 0x6 0xA 0x6 0xB 0x17 0xA 0x6 0xB 0x6 0xA 0x17 0xB 0x6 0xA 0x6 0xB 0x6 0xA 0x7 0xA
0x6 0xB 0x6 0xA 0x6 0xB 0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x6 0xB
0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x6 0xB 0x17 0xA 0x6 0xB 0x6 0xA
For Arduino sketch:
unsigned int raw[100] =
{0x47,0x1F,0xB,0x17,0xA,0x17,0xB,0x6,0xA,0x6,0xB,0x6,0xA,0x17,
0xB,0x6,0xA,0x6,0xB,0x17,0xA,0x17,0xA,0x7,0xA,0x17,0xA,0x7,0xA,0x6,
0xB,0x17,0xA,0x17,0xA,0x6,0xB,0x17,0xA,0x17,0xB,0x6,0xA,0x6,0xB,0x17,0xA,
0x6,0xB,0x6,0xA,0x17,0xB,0x6,0xA,0x6,0xB,0x6,0xA,0x7,0xA,0x6,0xB,0x6,0xA,
0x6,0xB,0x6,0xA,0x7,0xA,0x6,0xB,0x6,0xA,0x7,0xA,0x6,0xB,0x6,0xA,0x6,0xB,
0x6,0xA,0x7,0xA,0x6,0xB,0x6,0xA,0x6,0xB,0x17,0xA,0x6,0xB,0x6,0xA,};
Also auf das senden dieser Daten kann ich verwenden Sie diese Anweisung:
irsend.sendRaw(raw,100,38);
Das problem ist ich kann nicht alle Antworten aus dem Gerät brauche ich zur Kontrolle. Ich bereits überprüfen, meine IR-Sender meine Lesung ist der gleiche oben.
Im ich etwas fehlt?
InformationsquelleAutor Lemuel Adane | 2014-03-30
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie mehrere Lesen des Signals, dann wird der Durchschnitt Ihrer Werte zu entfernen, kleine bias-Fehler. Werden Sie sicher, dass Ihr Sender und Empfänger verwenden den gleichen Licht-Wellenlänge und arbeiten bei 38KHz (Sie übertragen die Modulation bei 38KHz. Wenn Ihr Sender funktioniert-modulation für Sie, dann sollten Sie nicht verwenden IRremote).
Außerdem, was erwartest du als "Antwort"? Normalerweise werden IR-Kommunikation ist one-way.
Erreichen Sie die 100 Byte-Grenzwert von RAWBUF, so dass Sie wahrscheinlich benötigen, um diese Zahl erhöhen,. Versuchen Sie, gehen bis zu 400.
Öffnen in IRemote.h und ändern Sie diese Zeile (ungefähr #122)
etwas größer
Ich bin, binden Sie Ihr code mit einem Samsung air conditioner und ich erhalte 116 bytes