Frage von infinitif, 40

Arduino Infrarot-Empfänger stoppt plötzlich mit der Datenausgabe?

Hallo liebe Community, Vor kurzem habe ich eine Schaltung zur Steuerung 2 Motoren mithilfe von Infrarot aufgebaut und einen Code geschrieben.
Vom Prinzip her funktioniert der Code und die Schaltung. Nun kommt es aber zu folgendem Problem: Immer wenn ich per Fernbedienung den Code sende, er soll einen Motor vorwärts und einen Rückwärts laufen lassen, dann macht er das, nimmt aber keine weiteren Signale mehr auf und ich muss das Board zurücksetzen...
Die Motoren Simmuliere ich mit jeweils 2 LEDs (Eine vorwärts, eine Rückwärts).
Kann mir jemand helfen?

Hier der Code :

#include <IRremote.h>;

const int RFENGINE = 5;

const int RBENGINE = 10;

const int LFENGINE = 6;

const int LBENGINE = 9;

const int RECV_PIN = 3;

IRrecv(RECV_PIN);

decode_results results;

void setup()

{

pinMode(RFENGINE,OUTPUT);

pinMode(RBENGINE,OUTPUT);

pinMode(LFENGINE,OUTPUT);

pinMode(LBENGINE,OUTPUT);

irrecv.enableIRIn();

Serial.begin(9600);

}

void startEngine(int leftf,int leftb, int rightf, int rightb)

{

analogWrite(LFENGINE,leftf);

analogWrite(LBENGINE,leftb);

analogWrite(RFENGINE,rightf);

analogWrite(RBENGINE,rightb);

}

void loop()

{

if(irrecv.decode(&results))

{

    Serial.println(results.value,DEC);

    if(results.value == 16718055)       //Vorwärts

    {

         startEngine(100,0,100,0);

     }

     else if(results.value == 16726215)     //Rechtsum

      {

          startEngine(100,0,0,100);

       }

       else if(results.value == 16716015)    //Linksum

        {

            startEngine(0,100,100,0);

        }

            else if(results.value == 16730805)   //Zurück

        {

              startEngine(0,100,0,100);

         }

        else

           Serial.println("UNBEKANNTER BEFEHL");

        irrecv.resume();

        }

}

Lg Niko

Antwort
von Nube4618, 28

Habe eine Ladeüberwachung für meine Solaranlage mit einem Arduino gemacht. Die Bedienung bzw. das Kalibrieren mache ich ebenfalls mit einem kleinem IR-Sender, was problemlos läuft. 

Verwende die Bibliothek IRremote, welche man von der Arduino Website herunterladen kann. Dort hat es auch Beispiele dazu. 

Kann mir höchstens vorstellen, dass bei dir der Decoder in einem Endlosloop landet, nachdem er erste Befehl empfangen wird. Oder die Interrupts kommen sich in die Quere, falls du die auch für das ansteuern der Motoren (PWM) benutzt. 

Möglichkeit zur Fehlersuche: Nur die Fernbedienung mal testen, ohne LED's etc. Du kannst die Reaktion des Decoders dann über den Serial-Link zum PC zurückgeben, dann siehst du sofort, ob das Problem wirklich beim IR Decoder liegt. 

Kommentar von infinitif ,

Habe mithilfe einer Kamera getestet ob die Fernbedienung funktioniert (tut sie)

Den Empfangenen Code habe ich über die serielle Schnittstelle ausgegeben und eine Endlosschleife habe ich auch nicht gefunden...

Habe den Code jetzt aber nochmal hinzugefügt, vielleicht findest du ja noch eine...?

Danke auf jedenfall

Antwort
von Nube4618, 19

Ich vermute, dass du PWM-fähige Outputpins für die LED-Ansteuerung benutzt. Wenn diese mit dem gleichen Interrupt / Timer arbeiten wie IRremote, gibts einen Hänger. 

Welche Pin's PWM-fähig sind, kannst du auf der Arduino Homepage nachsehen, zwischen den verschiedenen Arduino - Modellen gibt es da unterschiede.

Kommentar von infinitif ,

Gute Idee, allerdings tritt das Problem auch auf wenn ich die Pins tausche und es macht ja keinen Unterschied ob ich die LEDs fürs vorfahren oder einen zum zurück und einen zum vorfahren...

Also muss das Problem ja woanders liegen

Kommentar von Nube4618 ,

Nimm doch einfach die Befehle für das ansteuern der Led raus, und sende stattdessen einen Text über serial zurück. Wenn's dann geht, liegt es an der Ansteuerung der LED's (eben PWM/Timer Problematik), und wenn es dann immer noch nicht geht, muss es was anderes sein

Antwort
von karajan9, 27

Hm... Ohne deinen Aufbau und deinen Code zu kennen ist das recht schwierig zu sagen.

Ich kann mir vorstellen, dass dein Code, sobald er ein Signal empfangen hat, mit der Ausführung von Code an anderer Stelle beschäftigt ist und nicht mehr auf neue Signale guckt. Die sleep-Funktion ist etwas, was das gerne mal kaputt macht.

Wenn du deinen Code postest könnten wie vielleicht mehr sagen :-)

Kommentar von infinitif ,

Habe den Code hinzugefügt (Vorschlag abgesendet)

Kommentar von karajan9 ,

Es gibt hier auch eine Funktion um Code einzufügen, der ist dass gleich viiiel besser lesbar ;-)

Ich werde es mir mal ansehen :-)

Keine passende Antwort gefunden?

Fragen Sie die Community