Um einen kleinen Beitrag beizusteuern, habe ich den folgenden Code geschrieben, den man so in die aktuelle Version übernehmen könnte. Der wird nur aktiviert wenn man das JACKDETECT rauskommentiert. Habe mich da an dem FIVEBUTTON Mode orientiert.
Wenn Kopfhörer eingesteckt werden, wird eine Initiale Lautstärke für Kopfhörer aktiviert. Gleichzeitig kann im Kopfhörermodus nicht über eine festgelegte Lautstärke erhöht werden. Wenn man die Kopfhörer rausgesteckt wird alles wieder zurückgesetzt.
Bei mir funktioniert es aber ich würde mich freuen, wenn jemand den Code testen könnte.
Edit: Ein Jumperkabel geht vom JD der Kopfhörerbuchsenplatine zu einem offenen Digitalen Pin an Thorsten’s Platine, in meinem Fall Pin 8.
/* -------------------------> Vor dem Setup <---------------------------- */
// uncomment the below line to enable jack detected max volume support
// #define JACKDETECT
#ifdef JACKDETECT
// Definition des Jackdetect Pins
#define jdPin 8
#endif
#ifdef JACKDETECT
// Variablen für Prüfung des Kopfhöreranschlusses
int jdMaxVolume = 15 ; // Maximale Lautstärke wenn Kopfhörer angeschlossen ist
int jdInitVolume = 10 ; // Initiale Lautstärke wenn Kopfhörer angeschlossen ist
int jackDetectState = HIGH ; // aktueller Status - ob Kopfhörer angeschlossen ist
int lastJackDetectState = HIGH; // vorhergehender Status - ob Kopfhörer angeschlossen ist
int beforeJackdetectVolume = 10; // Lautstärke bevor Kopfhörer angeschlossen wurden
int beforeJackdetectMaxVolume = 10; // Maximale Lautstärke bevor Kopfhörer angeschlossen wurden
#endif
/* -------------------------> Im Setup <---------------------------- */
#ifdef JACKDETECT
// JackDetect Pin
pinMode(jdPin, INPUT_PULLUP);
#endif
/* -------------------------> Im Loop <---------------------------- */
#ifdef JACKDETECT
// Prüfung und Aktualisierung des Köpfhöreranschlusses
// Aktuellen jackdetect Status einlesen
jackDetectState = digitalRead(jdPin);
// Vergleich zwischen aktuellem und vorhergehendem Status
if (jackDetectState != lastJackDetectState) {
// Wenn Status sich geändert hat
if (jackDetectState == LOW) {
// Wenn aktueller Stauts LOW, dann ist der Kopfhörer angeschlossen
beforeJackdetectVolume = volume; // Speichern der Lautstärke bevor Kopfhörer angeschlossen wurden
beforeJackdetectMaxVolume = mySettings.maxVolume; // Speichern der aktuellen Maximalen Lautstärke - bevor Kopfhörer angeschlossen sind
mySettings.maxVolume = jdMaxVolume; // Maximale Lautstärke auf Kopfhörermodus geändert
volume = jdInitVolume; // Aktivieren der Initialen Lautstärke bei Anschluss der Kopfhörer - wenn rauskommentiert, wird die maximale Lautstärke im Kopfhörermodus gesetzt
Serial.println(F("Köpfhörer angeschlossen"));
} else {
// Wenn aktueller Stauts HIGH, dann ist der Kopfhörer ausgesteckt
mySettings.maxVolume = beforeJackdetectMaxVolume; // Maximale Lautstärke zurücksetzen
volume = beforeJackdetectVolume;
// volume = mySettings.initVolume; // Alternativ kann man die Initiale Lautstärke beim entfernen des Kopfhörers einstellen lassen
Serial.println(F("Köpfhörer ausgesteckt"));
}
}
// Speichern des akuellen Status als letzten Status für den nächsten Loop
lastJackDetectState = jackDetectState;
#endif