Weil meine Holzbox schon ein Poti hatte … habe ich das auch jetzt in der DEV firmware eingepatcht. Poti 10kOhm : Schleifer(Mitte) geht an pin A3,eine Seite GND, andere Seite 3.3V.
Hi Tobi. Danke für deinen Quellcode. Ich habe an meiner neuen Musikbox auch wieder einen Poti verbaut und die Lautstärkesteuerung wie folgt angepasst:
1.) Initial-Lautstärke von Poti-Stellung abhängig überschreiben (immer ausgehend von der Max-Volume):
void loadInitialPotiVolume(){
Serial.println(F("=== loadInitialVolumeFromPoti"));
int potiValue = analogRead(A3); //read the input on analog pin 3
Serial.print(F("Poti Value: "));
Serial.println(potiValue);
mySettings.initVolume = (potiValue/(1023/mySettings.maxVolume));
Serial.print(F("New Initial Volume: "));
Serial.println(mySettings.initVolume);
}
wird aufgerufen bei:
// load Settings from EEPROM
loadSettingsFromFlash();
loadInitialPotiVolume();
2.) Funktion um Poti auszulesen:
void readPoti(){
int myPotiValue = analogRead(A3); //read the input on analog pin 3
int myPotiVolume = (myPotiValue/(1023/mySettings.maxVolume));
if (myPotiVolume != volume){
mp3.setVolume(myPotiVolume);
volume = myPotiVolume;
}
Serial.print("New Volume: ");
Serial.println(volume);
}
3.) Potentiometer auslesen wenn Musik gespielt wird
if (isPlaying()){
readPoti();
}
4.) Wenn bei Pause wieder Play gedrückt wird Poti erneut auslesen (vielleicht hat jemand an der Lautstärke gedreht während der Pause)
if (pauseButton.wasReleased()) {
if (ignorePauseButton == false)
if (isPlaying()) {
mp3.pause();
setstandbyTimer();
}
else if (knownCard) {
readPoti();
mp3.start();
disablestandbyTimer();
}
ignorePauseButton = false;
}
Funktioniert soweit ganz gut und ich wollte die Lautstärke nur setzen, wenn sich die “volume”-Variable geändert hat und die Musik spielt, um den DFPlayer nicht dauerhaft zu belasten.
map() konvertiert den analogen bereich 0…1023 in den bereich min-max ohne daß man selbst rechnen muß.
if( abs(volume-lastvolume) >1){
sorgt dafür, daß mp3.setVolume() nur an den DFplayer geschickt wird, wenn sich Volume mehr als 1 geändert hat.
ich habe die Abfrage von A3 nur in im setup() loop() und voiceMenu() damit kann ich immer die Lautstärke ändern, egal in welchem Modus die Box ist. Ich wollte nur an möglichst wenigen stellen Code ändern, damit ich meine Änderungen schnell in eine neue DEV version patchen kann.
Moin,
also ich arbeite gerade daran, das Poti, was hier noch rumfliegt in die Software zu integrieren. Jetzt bin ich soweit, dass ich die Volume-Buttons auskommentiert hab. bei den Änderungen im loop() hast du die readButtons(); oberhalb von mp3.loop() oder hast du das über volumePoti.read(); gemacht?
außerdem meckert er ganz zu Beginn, dass volume nicht deklariert wurde… sorry, aber ich bin absoluter Anfänger in Sachen Programmierung würde mich aber über die Lautstärkeregelung über Poti für mein nächstes Projekt freuen.
Danke schonmal.
PS: wo bekommst du die 3.3V her? über die Platine von @thorsten sind die Möglichkeiten ja eher begrenzt…
Serial.println(volume);
gibt dir in der Konsole den aktuellen Wert aus, einfach im Loop() oben einfügen.
Wenn du alles am laufen hast einfach die Zeile wieder löschen.
sollte nur von 0- max 30 gehen. Wobei max ja auch durch eine Variable begrenzt werden kann.
So, nachdem jetzt alles läuft, hab ich mal folgendes noch für den seriellen Monitor angepasst:
Serial.print(F("Volume = ));
Serial.println( volume);
dann steht das auf einer Zeile… ja, Kosmetik, aber hey…
Hallo @Norbert, ich habe mich an dem Code von Theobert1000 (Vorstellung TheoBert 1000) orientiert. Ich habe es mit einem #define POTI in meinen Code rein, denn du musst es bei mehreren Stellen berücksichtigen:
beim Setup() soll die Lautstärke ausgelesen werden
Lautstärke soll nicht mehr über die Tasten regelbar sein
ggf. deaktivieren des Potis beim auflegen von Modifier Karten (toddler mode)
Ich habe es für meinen nächsten TonUINO schon in meinem Code drin, und auch getestet:
Die entsprechenden Stellen findest du am besten wenn du nach “POTI” bzw. potiVolume() suchst.
Erst mal Danke für den Code.
Nur noch mal für Dumme:
Der Poti wird an A7 und 5V angschlossen?
Kann man die maximale Lautstärke über einen Zahlenwert ändern?
Wenn ja wo im Code?
Ich muss auch nochmal ganz doof Fragen, wenn der poti mit seinen drei Anschlüssen an A7, GND und 5V angeschlossenen wird, Woher kommt dann das Audiosignal zu den Boxen? Oder is der poti nur separat zum lautstärke auslesen, quasi als tastenersatz und wir gar nicht zwischen DFplayer und Boxen geschaltet…?