INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme beim Auslesen eines IR Empfängers
03.03.2016, 22:32
Beitrag #1
Probleme beim Auslesen eines IR Empfängers
Hallo Forum,

ich ich möchte mit einer Fernbidienung eine Lichterkette steuern.
Die Beispiele mit IRremote.h funktionieren alle einwandfrei.

Erweitere ich den Code um ein paar Schleifen, bekomme ich von der IR
keine reproduzierbaren Werte mehr. Das Problem ist wohl das Timing.
Man ließt die Daten während der Controller noch schreibt.

Als brauchbare Lösung habe ich jetzt sowas gebastelt:

boolean inService = false;
void serialInterrupt()
{
if (inService) return;
inService = true;
interrupts();
delay(70);
if (irrecv.decode(&results))
{
Serial.println(results.value, DEC);
irrecv.resume();
}
inService = false;
}

Entscheidend ist hier das nutzen eines INT und das delay(70).
Weiter runter kommt man fast nicht, weil der Timer von
IRremote wohl mit 50uS arbeitet.

Kennt jemand noch einen anderen Ansatz?

Smile
linuxpaul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2016, 22:38
Beitrag #2
RE: Probleme beim Auslesen eines IR Empfängers
Wenn du mal genau beschreibst, was du machen möchtest und deinen kompletten Sketch postest, können wir sicher helfen.

Poste den Sketch bitte in Code-Tags (Schaltfläche # verwenden).

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2016, 23:51
Beitrag #3
RE: Probleme beim Auslesen eines IR Empfängers
(03.03.2016 22:38)hotsystems schrieb:  Wenn du mal genau beschreibst, was du machen möchtest und deinen kompletten Sketch postest, können wir sicher helfen.

Poste den Sketch bitte in Code-Tags (Schaltfläche # verwenden).

Ich möchte eine Lidl Lichterkette mit einer Fernbedienung selber
steuern. der Sketch ist im Anhang.
.ino  mystripe.ino (Größe: 2,16 KB / Downloads: 40)

Ich bin ganz neu im Thema Arduino und habe mit der Ferbedienung
und den Beispielen IRrecvDemo und IRrecvDump begonnen.
hat alles prima geklappt. Dann habe ich den Code in meinen Sketch
integriert und der IR Receiver hat nur noch Zufallszahlen geliefert.

Nu sieht es für mich so aus, als ob irrecv.decode (&results) die Daten
ließt, die gerade im Puffer sind, es reicht wohl ein BIT.
D.h. wenn dieser gerade befüllt wird saugt er das raus was gerade da ist,
den Rest und ggf. noch mehr wenn er wieder vorbei kommt.
Einstellmöglichkeiten (Puffer oder IR Type) habe ich keine gefunden,
daher die Lösung das Auslesen mit einem INT zu starten, >50 uS
zu warten und dann die Daten auslesen. Funktioniert.

Kennt ihr noch einen anderen Trick?

Smile
linuxpaul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 00:09
Beitrag #4
RE: Probleme beim Auslesen eines IR Empfängers
Ich kann dein Problem nicht nachvollziehen.

In meinen Projekten kenne ich diese Problem nicht. Da läuft der Code auch in der Loop und die einzelnen Befehle (Funktionen) werden in einer if-Anweisung ausgeführt.
Das funktioniert fehlerfrei. Es wird immer der Befehlscode übertragen, der auch gesendet wird.

Was für eine IR-Empfänger verwendest du? das könnte noch das Problem sein.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 08:00
Beitrag #5
RE: Probleme beim Auslesen eines IR Empfängers
(04.03.2016 00:09)hotsystems schrieb:  Ich kann dein Problem nicht nachvollziehen.

In meinen Projekten kenne ich diese Problem nicht. Da läuft der Code auch in der Loop und die einzelnen Befehle (Funktionen) werden in einer if-Anweisung ausgeführt.
Das funktioniert fehlerfrei. Es wird immer der Befehlscode übertragen, der auch gesendet wird.

Was für eine IR-Empfänger verwendest du? das könnte noch das Problem sein.

ich habe mir diese Fernbedienung mit diesem Starter Kit gekauft.

So wie du das schreibst funktioniert bei dir ein Code wie dieser ohne Probleme?

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
switch(go){
case false:
for(uint16_t i=0; i<LENGTH;i++)
{
strip.setPixelColor(i,Wheel(wc));
strip.show();
delay(20);
wc++;
if (wc>255) wc=0;
}
go = true;
break;

case true:
for(uint16_t i=LENGTH-1;i>0; i--)
{
strip.setPixelColor(i,Wheel(wc));
strip.show();
delay(20);
wc++;
if (wc>255) wc=0;
}
go = false;
break;
}
}

Bei mir leider nicht.

Smile
linuxpaul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 10:38
Beitrag #6
RE: Probleme beim Auslesen eines IR Empfängers
Von deinem Sketch habe ich nicht geschrieben, dass er bei mir funktioniert.

Sondern dieser hier:
Code:
void loop()
{
  if (irrecv.decode(&results))
  {
  if (results.value == 16738455)                          //Taste 1 ein/aus
    {
     \\Meine Funktion 1
    }
    else if (results.value == 16750695)                   //Taste 2 ein/aus
    {
    \\Meine Funktion 2
    }
    else if (results.value == 16756815)                   //Taste 3 ein/aus  
    {
      \\Menie Funktion 3
    }
    }
  irrecv.resume(); // Receive the next value
  }
}
Das geht natürlich auch mit "Switch/Case"

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 14:13
Beitrag #7
RE: Probleme beim Auslesen eines IR Empfängers
(04.03.2016 10:38)hotsystems schrieb:  Von deinem Sketch habe ich nicht geschrieben, dass er bei mir funktioniert.

Mit "ein Code wie dieser" meinte ich exemplarisch wie.
In deinem Beispiel machst du die IR Freigabe nach der "StateMachine", oder?
Ok, damit hast du praktisch das selbe "Timing" wie in den Beispielen.
D.h. aber auch, dass Eingaben ignoriert werden, wenn es zu innerhalb
der Machine zu Laufzeiten kommt, oder?
Aber Danke für den Ansatz.

Smile
linuxpaul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 14:44
Beitrag #8
RE: Probleme beim Auslesen eines IR Empfängers
(06.03.2016 14:13)linuxpaul schrieb:  Mit "ein Code wie dieser" meinte ich exemplarisch wie.
In deinem Beispiel machst du die IR Freigabe nach der "StateMachine", oder?
Ok, damit hast du praktisch das selbe "Timing" wie in den Beispielen.
D.h. aber auch, dass Eingaben ignoriert werden, wenn es zu innerhalb
der Machine zu Laufzeiten kommt, oder?
Aber Danke für den Ansatz.

Ja, das stimmt.
Generell sollten aber längere Laufzeiten verhindert werden, was ja auch meistens klappt.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Big Grin Probleme mit pgm_read_word NoGi 5 107 15.02.2017 16:15
Letzter Beitrag: Tommy56
  Arduino Serielle Schnittstelle auslesen mit Visual Basic Obermuda 1 144 29.01.2017 17:02
Letzter Beitrag: hotsystems
  Probleme bei Countdown ferdi 0 101 23.01.2017 10:45
Letzter Beitrag: ferdi
  Arduino hängt beim Upload deranda 14 764 20.01.2017 16:14
Letzter Beitrag: renid55
  Led Impuls beim Taster betätigen clemens5555 11 349 17.01.2017 20:00
Letzter Beitrag: renid55
  Beim Hochladen USB Problem Nils 10 509 29.12.2016 21:05
Letzter Beitrag: renid55
  Fehler beim Hochladen steyr 24 665 16.12.2016 07:52
Letzter Beitrag: hotsystems
  Fehlermedungen beim Kompilieren Franz54 7 412 07.12.2016 14:29
Letzter Beitrag: Pit
  Mit dem Arduino JSON Webseiten auslesen seb201 3 236 05.12.2016 22:25
Letzter Beitrag: Tommy56
  Messchieber auslesen mit nem UNO roadcaptain 8 478 15.11.2016 14:30
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste