Go Down

Topic: Arduino mit ir-ansteuern (Read 555 times) previous topic - next topic

invisible09

Hallo, Ich habe schon mit led´s und Motoren gearbeitet und möchte diese jetzt per Ir ansteuern. Dazu will ich einen SONY Fernbedienung verwenden. Ich habe die IR-libary schon eingebunden(http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html) und habe auch schon ein paar Experimente durchgeführt die Codes der Fernbedienung einzulesen: Dabei bekam ich immer Ergebnisse wie 274H97H6!!!

Der sketch welcher die Led ansteuern soll lautet:
#include <IRremote.h>

int RECV_PIN = 6;
int ledrot = 13;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
   pinMode(ledrot, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
  }
  switch(results.value){


  case D00A1AC:                             //Hier liegt das Problem wenn sich Zahlen im Code befinden läuft das nicht!
  digitalWrite (ledrot, HIGH);
  break;
}

Liegt das an der Fernbedienung??(jede sendet andere Codes)...

Soll ich einen anderen Encoder benutzen wenn, WELCHEN???

Es tut mit Leid wenn dass einen idiotische Frage ist...aber was soll ich machen???

michael_x

Quote
Dabei bekam ich immer Ergebnisse wie 274H97H6!!!


Aber sicher nicht von      Serial.println(results.value, DEC);
results.value ist ein unsigned long , der meist einfacher zu lesen ist, wenn man ihn im HEX Format anzeigt.
( bei meiner Fernbedienung wechselt der Code bei zweimal der gleichen Taste dann nur um eine Ziffer, dezimal sieht es wie zwei komplett verschiedene Zahlen aus )

Aber hex oder dezimal ist eigentlich egal:

Quote
case D00A1AC:                             //Hier liegt das Problem ...

... weil D00A1AC keine Zahl ist. (  0xD00A1AC wäre eine, oder 218145196 wäre die gleiche Zahl, in Dezimalschreibweise ) 

an long Konstanten sollte man sogar noch ein L anhängen ( also 218145196L ) um sicherzugehen, dass der schlaue c++ Kompiler da nicht erst ein 16 bit Integer draus macht.
an unsigned Konstanten sollte man sogar noch ein U anhängen ... -> http://arduino.cc/en/Reference/IntegerConstants
also ( also 218145196UL )

invisible09

Danke für die Antwort!  Der Code den ich angegeben hatte war nur irgendein Bsp.! :smiley-roll-blue:
Endlich verstehe ich dass mit der Schreibweise! Eine Bitte : Gibt es irgendeine Tabelle zu dieser Dezimalschreibweise? Dass ich weiß welcher Buchstabe welche Zahl ist???(irgendwelche links) :D


uwefed

Quote
Der Code den ich angegeben hatte war nur irgendein Bsp.!


Es ist schwer deinen Fehler zu finden wenn es nur irgenein Beispiel ist.
Grüße Uwe

michael_x

ein Link, ein Link:

http://arduino.cc/en/Reference/IntegerConstants

Das ist sicher einer der schlechteren, aber bei hex constants steht, was die Buchstaben bedeuten...

Hexadezimalschreibweise ist Mathematik :
  jede Ziffer hat einen Wert zwischen 0 und F ( wobei A .. F für dezimal 10 bis 15 genommen werden )
  und jede Stelle ist 16 mal größer als die rechts daneben.
In c oder java ist die Syntax, dass man die Konstanten an vorangestellter 0x erkennt und so von Dezimal, Oktal Binär unterscheiden kann.

0xAFFE = ((10*16+15)*16+15)*16+14 = 45054  (oder -20482, je nachdem)
           A     F      F      E


Eine Tabelle brauchst du nicht, bei Bedarf hilft der Windows Taschenrechner, der auch eine Programmer-Ansicht hat.
Dass 0x100 dezimal 256 sind, ist Gewöhnungssache.
Wenn du dich dafür interessierst, schau dir auch die Binär-Darstellung an. Binär <-> Hex kann man im Kopf umrechnen.

Go Up