Fernbedienung auswerten

Hallo zusammen

Hardware:

Arduino Uno
OLED SSD1306
IR-Empänger
Fernbedienung

Ich habe versucht die IR-Fernbedienung in meinen Code zu integrieren.
Dies funktioniert aber nicht immer zu Hundert Prozent.

Das Display geht kurz an und erlischt dann wieder.

Habe herausgefunden, dass der IR-Code 4294967295 sehr schnell auftaucht, auch wenn ich nur kurz drücke.

Gibt es eine Möglichkeit diesen Code zu "filtern"?

Später möchte ich diesen Code für eine Raumsteuern verwenden.

Im Anhang ist noch der Code.

IR1.ino (1.92 KB)

Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Du musst natürlich den Zustand speichern, so lange bis er wieder durch den 2. Code (Ausschaltcode) ausgeschaltet wird.

Edit:
Deine Anweisung "irrecv.resume();" muss ans Ende der Code-Auswertung.
Sieh dir das nochmal im Code-Beispiel der Library an.

Darter69:
Habe herausgefunden, dass der IR-Code 4294967295 sehr schnell auftaucht, auch wenn ich nur kurz drücke.

4294967295 ist 0xFFFFFFFF oder -1 signed.

Normalerweise ist das der Wert für "kein Kode".

Hallo,

Auch ein Schaltbild wäre für die Fehlersuche hilfreich.
Du benutzt offenbar Pin 11 für den IR-Empfänger. Pin11 ist bei SPI für MOSI reserviert. So eine Pin-Kollision kann zu seltsamen Effekten führen. Versuche einen anderen Pin für den Empfänger.

Danke für die Antworten

Da mein Code aus diversen Beispielen erstellt wurde, ist er wahrscheinlich noch sehr chaotisch.

Dieser funktioniert soweit recht gut.

Die Fernbedienung ist halt nicht die mit der besten Leistung.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>                        
#include <IRremote.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

float humidity, temperature;

char incomingByte;
int lines = 0;
int chars = 0;
int temphigh = 0;
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()   {

Serial.begin(9600);
irrecv.enableIRIn();

dht.begin();
display.begin(SSD1306_SWITCHCAPVCC);
}

void loop() {
humidity = dht.readHumidity();                           
temperature = dht.readTemperature();                     
/*
// Temperatur für Einschaltung

if (temperature > 24.00) {
temphigh = 1;}   
*/
// IR-Empänger Teil Beginn
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
irrecv.resume();
}
display.clearDisplay(); //Display leeren

if (results.value== 16738455){ // FB Taste 1
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Temp:");
display.println(temperature);
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,0);
display.println("Luft:");
display.println(humidity);
display.display();
delay(2000);
}
if (results.value== 16750695){ // FB Taste 2
display.clearDisplay(); 
display.setTextSize(2);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Temp:");
display.println(temperature);
display.setCursor(0,30);
display.println("Luft:");
display.println(humidity);
display.display();
delay(200);
}
}

Darter69:
Dieser funktioniert soweit recht gut.

Die Fernbedienung ist halt nicht die mit der besten Leistung.

Und warum liest du nicht unsere Beiträge ?
Warum verwendest du keine Code-Tags ?

Weil ich zuerst am falschen Beitrag den Edit gemacht habe, und nachher musste ich warten bis einige Zeit ablief

Darter69:
Weil ich zuerst am falschen Beitrag den Edit gemacht habe, und nachher musste ich warten bis einige Zeit ablief

Alles klar.

Danke, jetzt kann ich den auch mobil besser lesen.
Und jetzt funktioniert es?

Es funktioniert soweit. Muss halt zwei oder dreimal drücken, dass die Anzeige umstellt.

Nur geht es nicht mehr mit dem UNO weil zuviel Speicher verbraucht wird!!!

Jetzt will ich Daten am Anschluss dann über das WLAN auslesen können.

Muss mich dazu aber wahrscheinlich länger mit dem Funkmodul ESP8266 rumschlagen.

Oder gibt es für dies schon fertige Codes?

Danke

Darter69:
Es funktioniert soweit. Muss halt zwei oder dreimal drücken, dass die Anzeige umstellt.

Nur geht es nicht mehr mit dem UNO weil zuviel Speicher verbraucht wird!!!

Das liegt vermutlich an der falsch gesetzten Anweisung.
Hatte ich im Post #1 schon geschrieben.

Das sollte auch mit dem Uno funktionieren, da musst du den Sketch wohl nur aufräumen.