IR Fernbedienung RELAIS SCHALTEN NICHT AB!!!

Hallo,
ich habe ein Schulprojekt bei dem ich per Arduino (ELEGO UNO R3) ein Rollo zum hoch und runterfahren ansteuern möchte(habe bis jetzt wenige bis keine Arduino Kentnisse).
Ziel ist es bei betätigen von der Fernbedienung, dass bei gedrücktem Knopf das Rollo hoch oder eben runterfährt. Zwar funktioniert das Prinzipiell schon, jedoch nur soweit dass die Relais 1. gehalten werden auch nachdem ich die Taste loslasse und 2. es funktioniert nicht, dass beide Relais gleichzeitig ausgeschaltet sind >:( ...entweder Relais1 = HIGH und Relais2 = LOW oder Relais1 = LOW und Relais2 = HIGH. Bin mitlerweile echt am verzweifeln...würde mich sehr über hilfreiche Tipps freuen! :slight_smile:
MfG
Fabian

#include "IRremote.h"


int  UP = 7;
int DOWN = 8;
int receiver = 12; 

#define DOWN 7
#define UP 8
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

void setup()
{ 
pinMode (DOWN, OUTPUT);
pinMode (UP, OUTPUT);
pinMode (12, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
(digitalWrite(UP,HIGH));  // damit beide Relais zu beginn nicht angeschaltet sind
(digitalWrite(DOWN,HIGH));  
}

void loop()
{
 

if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch(results.value)

    { 

     case(0xFF906F): // VOL+ button pressed
                     {digitalWrite(UP,HIGH);
                      digitalWrite(DOWN,LOW);}
                      break;
   

     case(0xFFE01F): // VOL- button pressed
                      
                        {digitalWrite(UP,LOW);
                         digitalWrite(DOWN,HIGH);}
                         break;

                        
    
    } 
      irrecv.resume(); // receive the next value
                     
   } 
  }

Gerne....aber bitte zuvor den Sketch hier in Code-Tags posten.
Dazu die Schaltfläche </> oben links im Editorfenster benutzen.
Dann können auch alle mobilen User den Sketch lesen.

Ich vermute mal, dass du während der Fahrt des Rollos die Taste der Fernbedienung dauerhaft drückst?

Das Problem ist, dass IR-Fernbedienungen beim dauerhaften Drücken einer Taste NICHT dauerhaft den gleichen Code senden, sondern nach dem ersten Funktionscode im Folgenden immer nur einen Wiederholungs-Code.

Du musst also prüfen, ob diese Wiederholungs-Codes weiterhin eintreffen.

ICH fände aber eine logische Steuerung besser, eine sog. "state machine":

  • falls Rollo nicht fährt und nicht schon Oben ist: bewirkt Code A den Start des Hochfahrens
  • falls Rollo fährt bewirkt jeder Code ein Stop des Fahrens (egal ob Hoch oder Runter)
  • falls Rollo nicht fährt und nicht schon Unten ist: bewirkt Code B den Start des Runterfahrens
  1. das Empfangspin für die Fernsteuerung kannst Du nicht als Ausgang definieren.
  2. was soll das sein: "if(IR == LOW)" ? IR wird durch 12 ersetzt (siehe #define IR 12 ) und dann vergleichst Du 12 == LOW.
    Darum wird ständig
    "{(digitalWrite(UP,HIGH));
    (digitalWrite(DOWN,HIGH));} "
    gesetzt und es kann gar nicht in die andere Richtung laufen. Lösche dieses IF.
  3. was soll das "goto (void setup)" außerhalb jeder Funktion? Löschen

Grüße Uwe