Stereoanlage mit Arduino einschalten

OP #3444489
Lesenswert?

Hallo,

Ich beschäftige mich gerade damit, meine Stereoanlage automatisiert 
einschalten zu lassen sobald der TV gestartet wird. Das ganze plane ich 
mit einem Arduino UNO zu verwirklichen.

Nun habe ich mit folgendem Sketch die IR-Codes der Fernbedienung 
herausgefunden.
1
#include <IRremote.h>
2

3
int RECV_PIN = 11;
4

5
IRrecv irrecv(RECV_PIN);
6

7
decode_results results;
8

9
void setup()
10
{
11
  Serial.begin(9600);
12
  irrecv.enableIRIn(); // Start the receiver
13
}
14

15
// Dumps out the decode_results structure.
16
// Call this after IRrecv::decode()
17
// void * to work around compiler issue
18
//void dump(void *v) {
19
//  decode_results *results = (decode_results *)v
20
void dump(decode_results *results) {
21
  int count = results->rawlen;
22
  if (results->decode_type == UNKNOWN) {
23
    Serial.println("Could not decode message");
24
  } 
25
  else {
26
    if (results->decode_type == NEC) {
27
      Serial.print("Decoded NEC: ");
28
    } 
29
    else if (results->decode_type == SONY) {
30
      Serial.print("Decoded SONY: ");
31
    } 
32
    else if (results->decode_type == RC5) {
33
      Serial.print("Decoded RC5: ");
34
    } 
35
    else if (results->decode_type == RC6) {
36
      Serial.print("Decoded RC6: ");
37
    }
38
    Serial.print(results->value, HEX);
39
    Serial.print(" (");
40
    Serial.print(results->bits, DEC);
41
    Serial.println(" bits)");
42
  }
43
  Serial.print("Raw (");
44
  Serial.print(count, DEC);
45
  Serial.print("): ");
46

47
  for (int i = 0; i < count; i++) {
48
    if ((i % 2) == 1) {
49
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
50
    } 
51
    else {
52
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
53
    }
54
    Serial.print(" ");
55
  }
56
  Serial.println("");
57
}
58

59

60
void loop() {
61
  if (irrecv.decode(&results)) {
62
    Serial.println(results.value, HEX);
63
    dump(&results);
64
    irrecv.resume(); // Receive the next value
65
  }
66
}

Der besagte Sketch sagte mir das der Einschaltcode entweder

Aus/Ein
Protocol: RC5
Value: 50C (12 bits)

oder

Protocoll RC5
Value: DOC (12 bits)

ist. Komischerweise wechselt dies immer. Ich nehme an der erste Code ist 
für das Starten der Stereo Anlage (Philipps MCM277) und der andere ist 
zum Ausschalten.


Soweit so gut,wenn ich diese Codes in einen Sende Sketch einfüge.
1
#include <IRremote.h>
2

3
IRsend irsend;
4

5

6
void setup()
7
{
8
  Serial.begin(9600);
9
}
10

11
void loop() {
12
  
13
      irsend.sendNEC(0x50C, 11); 
14
      delay(10000);
15
      irsend.sendNEC(0xD0C, 11);
16
      delay(1000);
17
      
18
 
19

20
    }


Geht gar nix, die Stereo-Anlage starten nicht. Die Diode ist garantiert 
richtig gepolt, da sie unter einer Kamera leuchtet. (Nur wenn man diese 
an die Versorgungsspannung hängt) Beim AUsgangspin kann man nichts 
erkennen, aber ich schätze das die Kamera & das Auge? zu träge für 36kHZ 
sind.

Dieses 0x vor dem IR-Code stand in einem Forum, ohne meldet er mir: 
"Ungültiger Suffix »C« an Ganzzahlkonstante" lässt sich also nicht 
kompilen.

Mit meiner Annahme das die Zahl am Schluss des IR-Send Befehls die 
Pinnummer ist liege ich doch richtig oder?


Was läuft falsch?
Gast #3444531
Lesenswert?

Max E. schrieb:
> Dieses 0x vor dem IR-Code stand in einem Forum, ohne meldet er mir:
> "Ungültiger Suffix »C« an Ganzzahlkonstante" lässt sich also nicht
> kompilen.

Verständlich, sonst erwartet der Compiler eine Dezimalzahl und die darf 
bekanntlich nicht die Ziffer 'C' enthalten.
OP #3444534
Lesenswert?

Danke, das erklärt einiges.

Ich konnte das Problem jetzt tatsächlich alleine lösen!! ;)
Ziemlich dumme Fehler im Code beim verwendeten Protokoll handelte es 
sich um RC5 nicht um NEC, weiteres ist die 2 am Ende nicht die Pinnummer 
sondern die Bitzahl. IRemote arbeitet standarttmäßig mit Pin 3. Naja, 
ist ja auch schon spät ;)
#3444604
Lesenswert?

Eben genau aus diesem Grund!

Wie soll der Empfänger denn sonst erkennen, ob Du die Taste nochmal 
gedrückt hast oder ob Du sie immernoch drückst?

Beispiel:

Du drückst die "2" auf der FB. Die FB sendet nun also 2 2 2 2 2 2 ...

Was soll der Empfänger damit anstellen? Programm 222222?

Andererseits ist es aber für den Empfänger trotzdem interessant zu 
wissen, dass Du die Taste noch drückst - z.B. bei der Lautstärke.



Gruß

Jobst

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren