Go Down

Topic: IR- Send / Receive Problem (Read 880 times) previous topic - next topic

Auron88

Hallo,
ich möchte eine IR-Kommunikation zwischen zwei Arduino Boards erzeugen und verwende die Lib vom ken shirriff Blog.
Wenn ich nun zwei kleine Testprogramme auf die Boards lade (eins für Send und eines für Receive) funktioniert das Ganze problemlos (Auch in beide Richtungen).
Verwende gerade den Sony Code.

Jetzt aber zum eigentlichen Problem, das mir etwas Kopfzerbrechen bereitet und ich hoffe ihr könnt mir weiterhelfen:
Nachdem ich nun mit dem einen Board gesendet habe "irsend.sendSony(0x0FF,12)" , kann es daraufhin keinerlei Werte mehr empfangen und geht nicht mehr in die "if (irrecv.decode(&results))" Schleife rein. Wenn ich vorher nichts sende funktioniert aber alles.

Kann es sein, dass die Send-Funktion die Receive-Funktion in irgendeiner Art und Weise blockiert? Oder hat jemand schon einmal von diesem Problem gehört? Im Netz habe ich ein paar Posts zu der Frage gefunden, jedoch nie eine Antwort darauf.
Das andere Board sendet per sendSony den 0x0FE

Hier dann noch mein Code:

Code: [Select]

#include <IRremote.h>

/*---------------------*/
/* Uno Algorithmus */
/*---------------------*/

// 0x0FF = START
// 0x0FE = START ACCEPTED
// 0x0FD = END

/* PINs */
int RECV_PIN = 11;  // receive
int taster_PIN = 7; // Start Taster

/* Variables */
IRrecv irrecv(RECV_PIN); 
decode_results results; 
IRsend irsend;
int message = 0;
boolean startAccepted = false;  // warte auf Accept vom anderen Board

void setup() {
                Serial.begin(9600);
                pinMode(taster_PIN, INPUT);
                irrecv.enableIRIn(); 
}

void loop() {
                digitalWrite(taster_PIN, LOW);  // taster auf aus
 
                /* PRESS TASTER */
                if (digitalRead(taster_PIN) == HIGH) {  // start wenn taster gedrückt
                               Serial.println("Taster pressed");
   
                               /* SEND START */
                               for (int i = 0; i < 3; i++) { 
                                               irsend.sendSony(0x0FF, 12); 
                                               Serial.println("---Send: START---");
                                               delay(100); 
                               }
   
                               /* RECEIVE START ACCEPTED */
                               while(1) {
                                               Serial.println("1");   // hier gehts noch
                                               if (irrecv.decode(&results)) {   
                                                               Serial.println("2");   // hier geht er nicht mehr rein..
                                                               message = (results.value); 
                                                               Serial.print(message);
                                                               Serial.print(": ");
                                                               if (message==0x0FE) {
                                                                            Serial.println("---Received: START ACCEPTED---");
                                                                            irrecv.resume(); 
                                                                            startAccepted = true;
                                                                            break;
                                                               }
                                                               irrecv.resume(); 
                                             } // if
                           } // while
               
                          /* start Measuring */
                          if (startAccepted == true) {
                                     Serial.println("Passt");
                          }
             } // taster
} // loop()



Ich hoffe ihr könnt mir weiterhelfen... Vielen Dank! :)
Grüße Auron88

Addi

Zieh mal die Diode beim gleichen Programm raus und teste ob es dann mit der Fernbedinung geht.

Addi
/ \    _|  _| o
 /--\ (_| (_| |

Auron88

Ich verwende diese Shields
http://www.linksprite.com/product/showproduct.php?lang=en&id=64
und möchte eigentlich ungern etwas abzwicken :-/

Aber wenn ich den Programmteil
Code: [Select]

/* SEND START */
                               for (int i = 0; i < 3; i++) { 
                                               irsend.sendSony(0x0FF, 12); 
                                               Serial.println("---Send: START---");
                                               delay(100); 
                               }

auskommentiere funktioniert das Receive wieder, falls das weiter hilft.

LG Auron

pylon

Nach jedem Senden musst Du ein irrecv.enableIRIn() aurufen, damit der Timer1 wieder auf Empfang umprogrammiert wird.

Go Up