Hallo,
Ich baue ein Lasertagsystem und habe ein Problem mit meinem Arduino UNO.
Das hier funktioniert nicht:
1 | #include <IRremote.h>
|
2 |
|
3 | IRsend irsend;
|
4 |
|
5 | int RECV_PIN = 11;
|
6 | IRrecv irrecv(RECV_PIN);
|
7 | decode_results results;
|
8 |
|
9 | void setup()
|
10 | {
|
11 | Serial.begin(9600);
|
12 | Serial.println("Enabling IRin");
|
13 | irrecv.enableIRIn();
|
14 | Serial.println("Enabled IRin");
|
15 | }
|
16 |
|
17 | void loop() {
|
18 | if (millis() - last >= 1000)
|
19 | {
|
20 | irsend.sendSony(0xa90, 12);
|
21 | }
|
22 |
|
23 | if (irrecv.decode(&results)) {
|
24 | irrecv.resume();
|
25 | Serial.println(results.value, HEX);
|
26 | }
|
27 |
|
28 | delay(100);
|
29 | }
|
Ich habe dann mal die zeit gemessen, die der Arduino bracuht, um das
Signal zu senden: 20 Millisekunden.
Dann habe ich einfach das Senden durch delay(20) ersetzt.
Das hier empfängt IR von Fernbediehnungen aber zuverlässig:
1 | #include <IRremote.h>
|
2 |
|
3 | IRsend irsend;
|
4 |
|
5 | int RECV_PIN = 11;
|
6 | IRrecv irrecv(RECV_PIN);
|
7 | decode_results results;
|
8 |
|
9 | void setup()
|
10 | {
|
11 | Serial.begin(9600);
|
12 | Serial.println("Enabling IRin");
|
13 | irrecv.enableIRIn();
|
14 | Serial.println("Enabled IRin");
|
15 | }
|
16 |
|
17 | void loop() {
|
18 | if (millis() - last >= 1000)
|
19 | {
|
20 | delay(20); //Senden braucht auch genau 20 Millisekunden
|
21 | }
|
22 |
|
23 | if (irrecv.decode(&results)) {
|
24 | irrecv.resume();
|
25 | Serial.println(results.value, HEX);
|
26 | }
|
27 |
|
28 | delay(100);
|
29 | }
|
Wieso funktioniert es mit einem delay aber nicht mit dem Senden? Obwohl
die IR-LED wirklich sendet und ich an der LED am Emfänger sehen kann,
dass es ankommt?
Julius