Version 2.1dev: Lautstärke durch langes Drücken der Tasten geht nicht

Das sollte eigentlich nicht so sein weder, in der DEV noch in meiner Firmware. Das funktioniert so, daß die Settings beim einschalten gelesen werden. Sind keine Settings im EEPROM vorhanden (sprich das cookie wird nicht gefunden) werden die defaults geschrieben und auch verwendet.

Ggf. dadurch verursacht, dass zuerst die 2.0.1 Einstellungen geschrieben hat und die 2.1 danach die vorhandenen Einstellungen falsch interpretiert?

Das kann eigentlich auch nicht sein, da die Master Version gar kein Admin Menü und damit auch gar keine Settings hat.

Das seltsame ist aber, dass ich den gleichen Effekt immer habe, wenn ich einen bisher für den Tonuino noch nicht benutzten Nano verwende. Wurde der Nano schon einmal für den Arduino verwendet, tritt das nicht auf. Da kann die Ursache doch nur in den gespeicherten Settings im EEPROM liegen.

Es ist ja auch gut möglich, das hier ein Bug (race condition oder whatever) existiert. Wollte lediglich sagen, das die von dir vorgeschlagene Lösung:

Quasi genau so schon in place ist.

Mal schauen ob da was zu finden ist. Wenn nicht, kann ich persönlich auch mit der Tatsache leben, dass ich bei Erstinbetriebnahme erst mal das Adminmenü abarbeiten muss.

Du müsstest halt weiter testen. z.B. betrifft das auch andere Settings (Startlautstärke, Maxlaustärke usw.). und werden die bei einem jungfräulichen Arduino auch das erste mal falsch auf der Konsole angezeigt etc…

Ja werde ich bei Gelegenheit tun. Muss nur erst mal einen neuen Nano mit den Pinleisten verlöten. Da komm ich heute nicht mehr zu.

Du kannst auch bei einem vorhandenen das EEPROM löschen. Wenn du zum testen jedes mal wirklich einen neuen nimmst, skaliert das irgendwann nicht mehr. :wink:

Ja, so viele habe ich auch nicht davon. Aber zwei bis drei hab ich immer auf Vorrat, auch für andere Projekte.

Annahme: Problem liegt bei der Zeile

Denn mySettings.invertVolumeButtons wird bei

am Anfang auf True gesetzt.

Gleichzeitig ist FIVEBUTTONS ja nicht per Default gesetzt.

Aber war nur ein kurzer Blick auf dem Handy.

Ja genau darauf bin ich auch gerade gestoßen. Bin gerade dabei das zu verifizieren.
So, Ich habe das mal gecheckt.
Egal welcher Wert in void resetSettings() mySettings.invertVolumeButtons steht, true oder false , wird im ser Monitor bei Programmstart der letzte vom Adminmenü gesetzte Wert angezeigt. Auch das Resetten des Arduino über das Adminmenü, oder das drücken der 3 Tasten beim Einschalten ändert diesen Wert nicht.
Einzig eine Umstellung über das Adminmenü führt zu einer Änderung des Wertes.
Die anderen Werte wie min Lautstärke usw. werden aber korrekt auf die defaultwerte gesetzt.
Ich habe auch mal versucht den Wert in void resetSettings() mySettings.invertVolumeButtons auf 0 oder 1 zu setzen, mit gleichem Ergebnis.

Was tun sprach Zeuss, die Götter sind besoffen!!

02.01.20
Weiterführend habe ich das ganze jetzt noch mal mit einem jungfräulichen Nano probiert.
Als erstes im Code nochmal in void resetSettings() mySettings.invertVolumeButtons den Wert auf false gesetzt.
Code aufgespielt und im ser Monitor die Werte ausgelesen. Siehe da, jetzt sind sie korrekt übernommen worden.
Ich denke mit dem Ändern des Defaultwertes für invertVolumeButtons auf false sollte das Problem nun behoben sein.
Was mich nur wundert ist, dass beim Löschen des EEPROMS über die drei Tasten beim Einschalten des Tonuinos die Werte nicht korrekt übernommen werden. Resetten über das Adminmenü funktioniert.

Hi @stephan
Ich habe es jetzt gelöst. Siehe meinen letzten Post.
Gruß Thomas

Ersteres ruft loadSettingsFromFlash() auf, letzteres direkt resetSettings(). Wahrscheinlich liegt der Bug irgendwo da. Müsstest du mal ein paar debug prints einbauen und die Ausgaben checken was da im einzelnen genau passiert.

Hallo @stephan
Ich denke, dass Ich den Grund für das fehlverhalten beim Resetten durch die drei Tasten beim Einschalten gefunden habe. Das Problem lag daran, dass der EEPROM nicht mit den Defaultwerten, sondern mit den letzten aktiven mySettings beschrieben wurde. Das simple Einfügen von
resetSettings();
Im Setup führte zum Erfolg.
Hier noch mal die gesamte Funktion mit der Änderung.
// *************** Manueller Reset beim Einschalten *************************

  // RESET --- ALLE DREI KNÖPFE BEIM STARTEN GEDRÜCKT HALTEN -> alle EINSTELLUNGEN werden gelöscht
  if (digitalRead(buttonPause) == LOW && digitalRead(buttonUp) == LOW &&
      digitalRead(buttonDown) == LOW) {
    Serial.println(F("Reset -> EEPROM wird gelöscht"));
    for (int i = 0; i < EEPROM.length(); i++) {
      EEPROM.update(i, 0);
    }
    resetSettings();
    loadSettingsFromFlash();
  }

Nach dem seriellen Monitor wird der EEPROM da jetzt scheinbar 2 mal geschrieben, aber die Werte sind dann auf jeden Fall auf default.

IMHO kannst doch loadSettingsFromFlash(); einfach weglassen oder?

Yep, Habs in Kommentar gesetzt. Funkst.
Hab noch ein kleines Feedback eingebaut. Erforderte aber ein delay, was aber eh nur beim Manuellen Resetten wirksam wird und sonst nicht stört.

// RESET --- ALLE DREI KNÖPFE BEIM STARTEN GEDRÜCKT HALTEN -> alle EINSTELLUNGEN werden gelöscht
  if (digitalRead(buttonPause) == LOW && digitalRead(buttonUp) == LOW &&
      digitalRead(buttonDown) == LOW) {
    Serial.println(F("Reset -> EEPROM wird gelöscht"));
    for (int i = 0; i < EEPROM.length(); i++) {
      EEPROM.update(i, 0);
    }
    resetSettings();
    //loadSettingsFromFlash();
    mp3.playMp3FolderTrack(999);    //Reset wurde durchgeführt!
    delay(5000);
    
  }

Ich danke euch. Wo kann ich den aktuellen Code finden? Schon in ein GitHub Repo gepusht? Habe auch gesehen, dass es so einige Forks und Pull Requests gibt, die interessante Änderungen beinhalten.

Hallo @alexander.willner
Schau mal in der Rubrik Tips und Tricks. Da habe ich einen Beitrag gepostet „Kurzes Resumee…“.
Da ist ein Ondrivelink drin mit „“"MEINER VERSION !!! „“ des Tonuino. Diese basiert auf der Standart DEV . Ich habe soweit alles was für mich von Interesse darin integriert. Wenn du meine Version verwenden willst, musst du auch die advert und mp3 Ordner von mir mit verwenden. Diese sind zwar abwärtskompatibel zu der Standart DEV aber für meine Version sind ein paar zusätzliche Sounddateien enthalten.
Der letzte FIX mit dem Resetten der Einstellungen ist da aber noch nicht drin.

Danke dir. Habe die Datei Tonuino-DEV-mit_LED_Animation-19-12-30.ino gefunden. Allerdings scheint bspw. mySettings.invertVolumeButtons noch auf true gestellt zu sein. Ich habe den Fix einmal unter https://github.com/AlexanderWillner/TonUINO/commits/DEV eingespielt - und hier auch den einen oder anderen Pull-Request integriert. Ich fürchte Änderungen in einer Datei auf einem Onedrive werden es nicht ins DEV-Repository ohne weiteres finden…