Anfänger benötigt Hilfe bei Volume Control

Hallo liebe Arduino Gemeinde,

ich bin neu hier im Forum sowie auch Neuling bzgl. Arduino
bzw. Programmierung vom Arduino.
Folgendes hatte ich vor:
Es gibt bereits einen Project Code für eine Volume Control

Dieser wäre für meine zwecke soweit auch gut geeignet.
Ich brauche jedoch den RC5 Philips Code um mein Gerät anzusteuern.
Weiterhin würde ich gern später noch ein paar zusätzliche Taster ansteuern
wollen wie z.B. On/Off/Play/Skip+/Skip-/Stop/Pause
Bisher ist es mir auch nach vielen Stunden probieren leider nicht gelungen das
auf den RC5 Code zu ändern …… geschweige denn die weiteren Extras
Ich wäre sehr erfreut wenn sich jemand bereit erklären würde mir bei der Umsetzung
zu helfen

im voraus schon mal ein Dankeschön

Gruß
Jo$Mask

JoSMask:
Bisher ist es mir auch nach vielen Stunden probieren leider nicht gelungen das
auf den RC5 Code zu ändern ……

Was hast Du denn probiert? Ich sehe hier kein Programm, aus dem ich entnehmen könnte, wo es hakt.

Kennst Du denn den zu sendenden Code? Möglicherweise wäre eine vorherige Analyse mit der hoffentlich vorhandenen Fernbedienung notwendig.

Hallo agmue,

ich bin jetzt davon ausgegangen das die zu sendenden Codes eine Art von Norm haben.

Der NEC Code wäre:

void loop(){
  n = digitalRead(encoder0PinA);
 if ((encoder0PinALast == LOW) && (n == HIGH)) {
   if (digitalRead(encoder0PinB) == LOW) {
     encoder0Pos--;
     irsend.sendNEC(0x20DF40BF,32);
     Serial.println ("volume up");
   } else {
     irsend.sendNEC(0x20DFC03F,32);
     Serial.println ("volume down");
     encoder0Pos++;
   }

Bei einem RC5 Code würde dann die (0x20DF40BF,32) sowie (0x20DF40BF,32) durch einen anderen ersetzt.

Muss man den Code der Originalen Fernbedienung auf jeden Fall auslesen ?

Gruß
Jo$Mask

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Zur IRremote Bibliothek gibt es ein Beispielprogramm zum Auslesen der originalen Fernbedienung, einschließlich NEC und RC5. Damit kannst Du herausfinden, welcher Code zu welcher Taste gehört, und das dann auf dem Arduino abspielen.

Wenn Du das gemacht hast, musst Du sendNEC durch sendRC5 mit den entsprechenden Werten ersetzen.

Gruß Tommy

Ich werde das morgen mal ausprobieren und Rückmeldung geben.

Vielen Dank schon mal für die schnelle und kompetente Unterstützung

Gruß
Jo$Mask

Tommy56:
Wenn Du das gemacht hast, musst Du sendNEC durch sendRC5 mit den entsprechenden Werten ersetzen.

Was stellst Du Dir unter "entsprechend" vor?

Es gibt keine Übersetzung von NEC in RC5.

Die, die er nach Deinem Vorschlag von der Fernbedienung ermittelt hat. Deshalb schrieb ich: Danach ...

Gruß Tommy

JoSMask:
ich bin jetzt davon ausgegangen das die zu sendenden Codes eine Art von Norm haben.

In D sind viele Dinge genormt, aber bei der Zuordnung der Codes zu den Tasten macht vermutlich jeder Hersteller, was ihm in den Sinn kommt.

JoSMask:
Muss man den Code der Originalen Fernbedienung auf jeden Fall auslesen ?

Würde die Sache vereinfachen.

agmue:
In D sind viele Dinge genormt, aber bei der Zuordnung der Codes zu den Tasten macht vermutlich jeder Hersteller, was ihm in den Sinn kommt.

Natürlich macht da jeder was ihm in den Sinn kommt. Wie sonnst soll der Hersteller denn sonst eine Ersatzfernbedienung zu völlig überteuerten Preisen an den Kunden bringen können?

Vielleicht hast Du Glück und findest hier Dein Gerät und die passenden Codes.
Bei mir hat es bis jetzt fast immer geklappt.

Ich habe jetzt ausgelesen aber dennoch vielen Dank für den Link

Wie gesagt mich wundert es das die Codes doch unterschiedlich sind und es dennoch
funktioniert, denn mit Marantz CD Player Codes aus dem link geht es auch, obwohl diese anders sind.

Hier mal das Auslese Ergebnis

volumeUp 10
volumeDown 11
powerOn 40C
powerOff 40C
Play 35
Stop 36
Pause 30
SkipUp 20
SkipDown 21
CDInput 50F  CD Player Menu
TOC 52D
Select/Ok 17
Menu 12

Wie in dem Code weiter unten zu sehen musste ich das dann noch etwas abändern und danach
hat es dann funktioniert.

Besteht evtl. noch die Möglichkeit eine Art Beschleunigung für den Encoder zu realisieren ?
Mit jedem Raster ändert sich die Lautstärke in 0.5 db schritten was mir zu langsam ist.

int val;
int encoder0PinA = A2;
int encoder0PinB = A1;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;

static int cero=0;
long unsigned int irCode;

int cmdReceived;

void setup(){
  Serial.begin(9600);
  pinMode (encoder0PinA, INPUT);
  pinMode (encoder0PinB, INPUT);
}

void loop(){
   n = digitalRead(encoder0PinA);
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      encoder0Pos--;
      irsend.sendRC5(0x510,12);
      Serial.println ("volume up");
    } else {
      irsend.sendRC5(0x511,12);
      Serial.println ("volume down");
      encoder0Pos++;
    }
    Serial.println (encoder0Pos);
  }
  encoder0PinALast = n;
}

Danke und Gruß
Jo$Mask

Sieh dir mal deine Code-Tags n, da läuft was falsch.

JoSMask:
Besteht evtl. noch die Möglichkeit eine Art Beschleunigung für den Encoder zu realisieren ?

Du könntest sendRC5 mehrmals ausführen.

Andere Variante: Du merkst Dir den Zeitpunkt der letzten Encoderbetätigung (millis) und vergleichst beim nächsten Mal, wie lange das her ist.
Kurzer Abstand (schnell gedreht) größere Änderung (z.B. 3), ansonsten 1.
Beispiele hier.

Gruß Tommy

Edit: Diesen Wert nimmst Du in eine Schleife, in der das sendRC5 ausgeführt wird.

@HotSystems ...... kläre mich auf ...... was läuft da falsch ?
Ich habe jetzt schon ein paar mal drüber geguckt, konnte aber
keinen wirklichen Fehler finden.

Wie gesagt, ich bin blutiger Anfänger sowie auch schon etwas in die Jahre
gekommen.
Von Jahr zu Jahr habe ich morgens immer mehr Gesicht zu waschen
und brauche noch viel Nachhilfe. :-*

In den nächsten Tagen werde ich noch versuchen das ein und andere
zu ändern.

Gruß
Jo$Mask

JoSMask:
@HotSystems ...... kläre mich auf ...... was läuft da falsch ?
Ich habe jetzt schon ein paar mal drüber geguckt, konnte aber
keinen wirklichen Fehler finden.

Bitte nicht falsch verstehen.
Es geht nicht um einen Fehler im Sketch, sondern wie du die Code-Tags anwendest.
Am Anfang des Sketches gehört ein Start-Tag [code], ans Ende ein Ende-Tag [/code], allerdings ohne die * (Sterne).

ahhhhh .......ok.......

Ich gelobe Besserung

Gruß
Jo$Mask

Warum änderst Du es dann nicht?

Gruß Tommy