Hörbuchmodus - reset/zurücksetzen?

Hallo zusammen,

erstmal ein kurzes “Hallo” in die Runde - ich lese zwar schon eine Weile mit, jetzt bin ich aber an dem Punkt an dem ich eine Frage stellen will und werde somit “aktiv” :wink:

Ich habe meiner Tochter auf einer Platine einen Tonuino zusammengelötet, prinzipiell nach Schaltplan mit Standardkomponenten und Stromversorgung via Wemos Battery Shield v3. Soweit alles prima. Die Geschichten wurden als Modus 5 (Hörbuch) via Serial Monitor der Arduino IDE auf die entsprechenden Ordner programmiert. Läuft bestens, daher auch feinsten Dank an die Entwicklung der Software.

Aber eine Frage/Problem(chen) steht noch im Raum. Die Buttons sind so programmiert dass ein kurzer Tastendruck die Lautstärke ändert, ein langer die Tracks schaltet. Die Kleine kommt damit sehr gut zurecht. Ab und an steckt sie aber mitten in einem Hörbuch und will alles trotzdem noch mal von Anfang an hören. Nun muss man mit langen Tastendrücken lange navigieren bis man wieder beim ersten Tack angekommen ist. Vielleicht habe ich es auch überlesen/nicht gesehen, aber gibt es die Möglichkeit den Status des Hörbuchs zu “resetten”. Sprich, das so umzustellen dass beispielsweise ein langer Druck auf die Pausetaste das zurücksetzt? Ich hatte ehrlicherweise noch nicht die Zeit im Quellcode zu suchen, aber vielleicht hatte ja außer mir schon einmal jemand die selbe Fragestellung (gelöst)?

Bilder folgen irgendwann auch noch (Gehäuse ist gedruckt, mit lila Filament).

Danke und Grüße

Sascha

Das geht bisher leider nicht. Verwendest Du denn 3 Tasten oder 5?
Ich frage, weil bei 3 Tasten ein langer Druck auf “Zurück” schon belegt ist.
Und verwendest Du die DEV oder Master?

Moin, Dev mit 3 Tasten. Wollte das so einfach wie möglich halten. Langer Druck auf Puase wäre an sich ideal, da drückt die Kleine fast nie drauf…

Hab ich genauso implementiert in meiner Firmware. 5s long press während Playback im Hörbuchmodus springt zu Track 1. Sollte eigentlich kein Problem sein, daß in DEV auch einzubauen.

1 „Gefällt mir“

Danke für die Info. Hast Du ein GIT zum testen?

Klick mal auf seinen Namen/Profil ; )

@stephan der Sprung zum 1. Track erfolgt dann statt der Ansage der Track-Nr?

Ansage der Tracknummer gibts bei mir gar nicht.

Denkbar wäre auch ein kurzes Drücken von VOR und ZURÜCK zusammen. Oder etwas länger halten, dann würde ich aber die Haltezeit für das Adminmenü verlängern

Da es mein erster Beitrag ist… erst einmal Danke ans Forum.

Dadurch habe auch ich es geschafft einen funktionierende TonUINO (zumindest die Innereien, die Box fehlt noch) mit Features wie Software Abschaltung usw. vor mir liegen zu haben.:grinning: Und das sogar auf Anhieb.

Da meine handwerklichen Fähigkeiten aber deutlich besser als meine Programmierfähigkeiten sind, habe ich zum diesem Reset eine Frage.

Ich verwende die Dev Version, aktuell mit 3 Knöpfen, und habe versucht den Code, den ich ändern müsste zu finden. Ich gehe davon aus, dass der Code bei Stephan von Zeile 988-999 ist. Und im Dev Code müsste es irgendwo ab Zeile 1359 sein, ist das richtige?

Aber was muss ich da genau ändern, muss ich da einen ganzen Abschnitt ändern und/oder anpassen wegen irgend welchen „Referenzen“ oder kann ich einfach „mp3.playMp3FolderTrack(802);“ in „playback.playListItem = 1;“ ändern? Bei Stephan steht nämlich auch noch etwas von EEPROM und STATUSLED? Hat jemand die Funktion in der Dev Version eingefügt und könnte den entsprechende Code einfach posten?

Danke für eure Hilfe.

Moin,
wenn du die DEV von Thorsten meinst, dann sollte doch eigentlich folgende Änderung in den Zeilen 985-1003 ausreichen (der Teil mit der Bedingung um mode 5):

} else if (pauseButton.pressedFor(LONG_PRESS) &&
           ignorePauseButton == false) {
  if (activeModifier != NULL)
    if (activeModifier->handlePause() == true)
      return;
  if (isPlaying()) {
    uint8_t advertTrack;
    if (myFolder->mode == 3 || myFolder->mode == 9) {
      advertTrack = (queue[currentTrack - 1]);
    }
    else {
      advertTrack = currentTrack;
    }
    // Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
    if (myFolder->mode == 8 || myFolder->mode == 9) {
      advertTrack = advertTrack - myFolder->special + 1;
    }
    mp3.playAdvertisement(advertTrack);
	
	if(myFolder->mode == 5){
		EEPROM.write(myCard.folder,1);
	}
}

Ggf. noch den CurrentTrack anpassen, falls erneut gespielt werden soll. Wird dann allerdings nur gemacht, wenn er grade spielt :wink:

Edit:
Sorry hatte die Zeilen aus dem Master referenziert, danke @stephan für den Hinweis. Habe den obigen Code entsprechend geändert.

Es muss lediglich die Bedingung

if(myFolder->mode == 5){
    EEPROM.write(myCard.folder,1);
}

eingefügt werden.

1 „Gefällt mir“

Danke für den Hinweis. Hört sich sehr einfach und plausibel an. Allerdings habe ich noch etwas Probleme die richtige Stelle zum einfügen zu finden.
Ja, ich meine DEV von Thorsten. Kann es sein das du mit Zeile 246-259 den Master code meinst? Oder stehe ich irgedwie auf dem Schlauch?:thinking:
Ich habe versucht die entsprechende Stelle

mp3.playAdvertisement(currentTrack);

im DEV code zu finden, bin aber aber gescheitert. Ich denke meine ursprüngliche Vermutung ab Zeile 1359 ist auch falsch.

Kann mir jemand auf die Sprünge helfen?

Du suchst die Stelle hier:

Danke für die Hilfestellung. Nach etwas rumprobieren habe ich den oben referenzierten Code nun wie folgt geändert (für alle die gerne copy&paste machen wollen :wink:)

} else if (pauseButton.pressedFor(LONG_PRESS) &&
           ignorePauseButton == false) {
  if (activeModifier != NULL)
    if (activeModifier->handlePause() == true)
      return;
  if (isPlaying()) {
    uint8_t advertTrack;
    if (myFolder->mode == 3 || myFolder->mode == 9) {
      advertTrack = (queue[currentTrack - 1]);
    }
    else {
      advertTrack = currentTrack;
    }
    // Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
    if (myFolder->mode == 8 || myFolder->mode == 9) {
      advertTrack = advertTrack - myFolder->special + 1;
    }
    
    if (myFolder->mode == 5) {
      currentTrack = 1;
      EEPROM.update(myFolder->folder, currentTrack);
      mp3.playFolderTrack(myFolder->folder, currentTrack);
    }
    else{
      mp3.playAdvertisement(advertTrack);
    }       
  }

Scheint zu funktionieren. Im Hörbuchmodus wir bei langem Drücken von play/pause der Speicher zurückgesetzt und Track1 wird abgespielt.
Bei den anderen Modi gibt es weiterhin die Track-Ansage.

1 „Gefällt mir“

Super, genau dass, nach dem ich gesucht habe! Mein Sohn hört mittlerweile auch längere Hörbücher die er nicht immer am schafft. Wenn er dann mal etwas anderes zwischendurch gehört hat mag er gerne von Vorne anfangen, jetzt klappt das dank euch auch!

Hallo zusammen.
Ich möchte es bei langem Tastendruck auf die „Trackzurück“ Taste haben.
Die Play Pause Taste, nutzen wir doch auch sehr oft, wenn es darum geht wie lange das Hörbuch denn noch geht. (Darf ich das noch fertig hören, Papa??? Ja, wenns net so lange geht. OK. Ist bei Nummer 32 von 40)
Kann mir das bitte jemand coden?
Oder Kann ich den Code von Kuzco nehmen und einfach nur die erste Zeile ändern in…
„} else if (previousButton.pressedFor(LONG_PRESS) &&“

und dann einfach hinte die 1003 Zeile drann hängen.
Ist das möglich? Ich habe übrigens auch die DEV mit 5 Tasten.

Vielen Dank für die Mühe schon vorab.

1 „Gefällt mir“

Hallo.
Hätte nicht jemand die Muse. :wink:

Grüße

Versuch es doch mal :wink:

Hallo. Also gut. Ich habe das bei 1005 einfach dahinter gesetzt. Geht soweit.
Aktueller Stand wird nochg angesagt bei langem Druck auf Play/Pause.
Spielstand wird zurückgestzt bei langem Druck auf „Leiser“ :wink:
PreviousButton habe ich nicht hinbekommen, weil dann Fehlermeldung beim kompilieren
request for member ‚pressedFor‘ in ‚previousButton‘, which is of non-class type ‚void()‘
Dafür bin ich jetzt zu lange von C weg.
Ich bekomm es nicht hin.
@Manuel. Hast du einen Tip für mich.

if (downButton.pressedFor(LONG_PRESS) &&
ignorePauseButton == false) {
if (activeModifier != NULL)
if (activeModifier->handlePause() == true)
return;
if (isPlaying()) {
uint8_t advertTrack;
if (myFolder->mode == 3 || myFolder->mode == 9) {
advertTrack = (queue[currentTrack - 1]);
}
else {
advertTrack = currentTrack;
}
// Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
if (myFolder->mode == 8 || myFolder->mode == 9) {
advertTrack = advertTrack - myFolder->special + 1;
}

if (myFolder->mode == 5) {
  currentTrack = 1;
  EEPROM.update(myFolder->folder, currentTrack);
  mp3.playFolderTrack(myFolder->folder, currentTrack);
}
else{
  mp3.playAdvertisement(advertTrack);
}       

}}

Bist du außerhalb der void loop()?

Dann füge vor deinen Zeilen mal noch readButtons(); ein.