DFPlayer Mini MP3 Player - Lautstärkepoti Analog einlesen?

Hallo in die Runde.
Ich habe bei meinem Sketch ein Problem bei dem ich nicht weiter komme. Vielleicht hat jemand eine zündende Idee.

Ich steuere über einen Arduino einen DFPlayer Mini MP3 Player über eine Serielle Datenleitung.
Ebenfalls ist ein 4x5 Keypad angeschlossen. Über dieses kann ich 15 verschieden MP3 Songs direkt anwählen. Die restlichen Tasten sind für Play,Pause, Stop usw. Nun möchte ich über ein Poti an einem Analogen Eingang noch die Lautstärke einstellbar machen.

Mein erste Ansatz war in einem Loop das Poti Analog über einen Befehl einzulesen dann über eine MAP Funktion von 0-1023 in 0-30 umzuwandeln. Diesen umgewandelten Wert gebe ich dann über eine Funktion an den DF Player um die Lautstärke einzustellen. Funktioniert soweit auch. Das Problem ist, das über diese Lösung ständig der Laustärkewert an den DF-Player gesendet wird, auch wenn er sich nicht ändert. Durch das ständige senden dieses Lautstärkewertes wird die Tonausgabe am DFPlayer aber gestört. Also so nicht praktikabel.

Meine Idee ist jetzt, diesen Lautstärkewert 0-30 nur an den DFPlayer zu senden wenn er sich geändert hat. Was ja auch reichen würden. Nur ist mir nicht klar wie ich das umsetzen kann.

Ich habe es mit eine IF ELSE Funktion probiert, komme aber nicht zu einer Lösung.

Also mein Problem:

Wie kann ich einen Analogen Wert ständig einlesen und nur über SoftwareSerial senden wenn er sich ändert?

Jemand eine Idee?

Gruß
Michael

Dein Ansatz war schon richtig, du musst nur immer den alten Wert speichern und mit dem aktuellen Wert vergleichen.
Sobald das Ergebnis sich ändert, also ungleich ist, den aktuellen Wert übertragen.
Oder du opferst eine Taste zur Übertragung des Wertes.

evtl. so:

if (aktueller_wert != letzter_wert)
   {sende aktueller_wert;
    letzter_wert=aktueller_wert;}

Danke HotSystems und ardubu.

Das mit der IF Anweisung und dem "!=" Vergleich habe ich schon getestet.
Damit kam ich aber nicht zu einer Lösung. Vielleicht habe ich etwas falsch gemacht
oder übersehen. Das muss ich Montag noch mal testen. Dann kann ich den Code auch einmal
hier einfügen.
Vielleicht gibt es aber ja noch eine Idee wie man das Lösen kann.

Gruß
Michael

Sandblech:
Vielleicht gibt es aber ja noch eine Idee wie man das Lösen kann.

Ich würde es mit einem Drehimpulsgeber lösen, also rein digital.
Die haben einen Taster der zur Datenübermittlung verwendet werden kann.

wenn dein Poti nicht 100%ig ist und der Wert etwas schwankt, löst das nicht dein Problem. Du solltest eine Histerese mit einbauen, d.h., nur wenn sich der Potiwert mehr als 10 ändert, senden.

@Hotsystems: Grundsätzlich schlechter Vorschlag, das mit dem Taster. Ist in der Praxis Mist

ElEspanol:
@Hotsystems: Grundsätzlich schlechter Vorschlag, das mit dem Taster. Ist in der Praxis Mist

Das sehe ich mal als Geschmacksache. Aber das kann wiederum jeder sehen wie er möchte.
Ich verwende es um an einem Wecker die Weckzeiten zu speichern. Geht sehr gut...aber wie gesagt, ist....

Danke für die Anregungen.

Für einen Drehimpulsgeber habe ich nicht genug PIN´s frei. Somit fällt das aus.
Durch das MAPing der 0-1023Werte des Analogen Eingangs auf einen Wert von 0-30 sollte das
Problem mit schwankendem Potiwerten auch ausblenden.

Nein, das Mapping hilft u.U. nicht viel, wenn der analoge Wert genau um einen Map-Punkt herum schwankt. Also die Histerese vor dem Mappen. Und danach, wenn sich der Wert ein paar Sekunden nicht geändert hat, im Eeprom abspeichern.

@HotSystems: Weckzeiten so abspeichern, ok. Aber die Lautstärke aufs Geratewohl hochdrehen, und nachdem Knopfdruck erst wird es lauter, na ich weiß nicht.

Du kannst auch analoge Pins dafür verwenden.

Dennoch sollte das Beispiel von ardubu funktionieren. So habe ich es auch beschrieben.
Evtl. machst du ja noch einen anderen Fehler.

ElEspanol:
@HotSystems: Weckzeiten so abspeichern, ok. Aber die Lautstärke aufs Geratewohl hochdrehen, und nachdem Knopfdruck erst wird es lauter, na ich weiß nicht.

Ok...ok.
Ich seh es ein, keine optimale Lösung.

Na ja, auch wenn die Lösung mit Tastern für manche Geschmäcker nicht praktikabel erscheinen mag ... je nach Anwendungsfall kann das aber dennoch gut funktionieren:

Ich habe selbst einen DFPlayer-Mini in Betrieb, der von einer microSD etwa 1650 MP3-Files per Zufall dudeln kann. Von diesen MP3s werden Titel und Interpreten via LCD-Display (I2C) ausgegeben, die ich zuvor in einem EEPROM gespeichert habe (denn aus dem DFPlayer selbst ließ sich das tatsächlich nicht auslesen). Die Lautstärke steuer ich mit Up-Down-Tasten.

Die komplette Navigation durch alle Optionen (inkl. Songsuche und Playliste) wird mit einem 3x3 Tastenfeld gesteuert, welches über EINE Analog-Leitung abgefragt wird. Daher, weil ich das ganze auf einem ATTiny85 = DIP-8 programmiert habe. Läuft störungsfrei und mach Spaß. Mehr als 1650 Songs passen eh nicht auf meine vorhandene 8 GB-Karte. Falls mal mehr Titel auf einer 16 oder 32 GB Karte gesammelt werden können, werden weitere EEPROMs hinzugeschaltet.

Ich überlege gerade "nur noch", wie ich die momentan vorhandenen Einzel-Bausteine in ein "stylisches" Gehäuse bringe...

Das alte Problem der Bastler: Wenn es läuft, wird es uninteressant. Der Gehäusebau ist dann die "Strafarbeit" :wink:

Gruß Tommy