Anderes Handling der Tasten bei 5 Tastenversion

Ich habe mal das Handling der Tasten für die 5 Tastenversion verändert.
Die Funktion der Tasten ist jetzt wie folgt.
3 Tasten Version -> unverändert
5 Tastenversion:
Play-Pause -> unverändert
Wenn Wiedergabe läuft:
Vol Tasten -> shortpress - schrittweises Ändern der Lautstärke
Vol Tasten -> longpress - Ansteigendes bzw abfallendes Ändern der Lautstärke
Vor/Zurücktasten -> shortpress 1 Titel vor bzw zurück.
Vor/Zurücktasten ->longtpress mehrere Titel vor bzw zurück, abhängig von Länge des Tastendrucks.
Wenn Wiedergabe nicht läuft, werden die shortcuts wie gewohnt aufgerufen.

Wenn die Tasten über das adminmenü getauscht wurden , werden auch die Tastenfunktionen entsprechend vertauscht.

Hier der code

// *************** Vol + Taste *************************************************

#ifdef LED_SR_Switch
if (upButton.pressedFor(LONG_PRESS) && lsrSwitch == false)
#endif
#ifndef LED_SR_Switch
if (upButton.pressedFor(LONG_PRESS))       // Wenn Taste lange gedrückt
#endif    
{

  if (isPlaying())                          // wenn Wiedergabe läuft
  {
    if (!mySettings.invertVolumeButtons)    // wenn Funktion der Vol-Tasten nicht getauscht
    {
      longPressVol = true;                  // VolÄnderung durch longPress 3 und 5 Tastenmodus
      volumeUpButton();                     // Lauter Taste
    }
    else                                    // wenn Funktion der Vol-Tasten getauscht
    {                                       
       nextButton();                        // weiter Taste longpress im 3 Tastenmodus
    }
  }
  else                                      // wenn keine Wiedergabe läuft
  {
    playShortCut(1);                        // Spiele Shortcut 1
  }

  ignoreUpButton = true;                    // LauterTaste übergehen
//#endif    // DreiTasten
}                                           // Ende longPress

else if (upButton.wasReleased())            // wenn Taste nur kurz gedrückt wurde (shortpress)
{
  if (!ignoreUpButton)                      // Wenn Taste gelesen werden soll
   {
    if (!mySettings.invertVolumeButtons)    // wenn Funktion der Vol Tasten nicht getauscht
    {
 #ifndef FIVEBUTTONS       
     nextButton();                         // weiter Taste im 3 Tastenmodus durch kurzen Tastendruck
 #endif
 #ifdef FIVEBUTTONS       
     volumeUpButton();                     // Lauter Taste
     longPressVol = false;                 // schrittweise VolÄnderung durch kurzen Tastendruck
 #endif       
    }
    else                                   // wenn Funktion der Vol Tasten getauscht
    {
 #ifndef FIVEBUTTONS       
     volumeUpButton();                     // Lauter Taste im 3 Tasenmodus
     longPressVol = false;                 // schrittweise VolÄnderung durch kurzen Tastendruck
  #endif
  #ifdef FIVEBUTTONS       
     nextButton();                         // weiter Taste im 5 Tastenmodus durch kurzen Tastendruck
 #endif
    }
   }
  ignoreUpButton = false;                  // Taste wieder auswerten
}                                          // ende shortpress
// *********** Ende Vol + Taste ********************************************

// *************** Vol - Taste *********************************************
#ifdef LED_SR_Switch
if (downButton.pressedFor(LONG_PRESS) && lsrSwitch == false)
#endif
#ifndef LED_SR_Switch
if (downButton.pressedFor(LONG_PRESS))
#endif    
{

  if (isPlaying())                                  // Bei laufender Wiedergabe
  {
    if (!mySettings.invertVolumeButtons)            // wenn Funktion der Vol-Tasten nicht getauscht
    {
      longPressVol = true;                          // VolÄnderung durch longPress 3 und 5 Tastenmodus
      volumeDownButton();                           // Leisertaste
    }
    else                                            // wenn Funktion der Vol-Tasten getauscht
    {
//#ifndef FIVEBUTTONS       
     previousButton();                              // Taste Track zurück 3 Tastenmodus durch longpress
// #endif
     }
  }
  else                                              // wenn keine Wiedergabe läuft
  {
    playShortCut(2);                                // Shortcut spielen Next-Taste
  }
  ignoreDownButton = true;                          // LeiserTaste übergehen
//#endif    // ende Dreitasten
}                                                   // ende longpress

else if (downButton.wasReleased())                  // Wenn Taste betätigt wurde (shortpress)
{
  if (!ignoreDownButton)                            // Wenn Taste ausgewertet werden soll
  {
    if (!mySettings.invertVolumeButtons)            // Wenn Funktion der Vol Tasten nicht getauscht
    {
  #ifndef FIVEBUTTONS       
      previousButton();                             // Zurück Taste kurzer Tastendruck 3 Tastenmodus
 #endif
 #ifdef FIVEBUTTONS       
     volumeDownButton();                            // Leiser Taste 5 Tastenmodus
     longPressVol = false;                          // schrittweise VolÄnderung durch kurzen Tastendruck
 #endif       
    }
    else                                            // wenn Funktion der Vol Tasten getauscht
    {
#ifndef FIVEBUTTONS
      volumeDownButton();                           // Leiser Taste 3 Tastenmodus
      longPressVol = false;                         // schrittweise VolÄnderung durch kurzen Tastendruck
#endif
#ifdef FIVEBUTTONS
     previousButton();                              // Zurück Taste kurzer Tastendruck 5 Tastenmodus
#endif
    }
  }
  ignoreDownButton = false;                         // Taste wieder auswerten
}                                                   // ende shortpress
// *********** Ende Vol - Taste ********************************************

// ********** 5 Tasten-Modus ***********************************************

#ifdef FIVEBUTTONS                              // 5 Tasten-Modus

// ************ Taste 4 **************************************

if (buttonFour.pressedFor(LONG_PRESS))
   
{
  if (isPlaying())                          // wenn Wiedergabe läuft
  {
    if (mySettings.invertVolumeButtons)     // wenn Funktion der Vol-Tasten getauscht
    {
      longPressVol = true;                  // VolÄnderung durch longPress
      volumeUpButton();                     // Lauter Taste
    }
   else                                     // wenn Funktion der Vol-Tasten nicht getauscht
    {                                       
      nextButton();                         // weiter Taste
    }
   
  }
  else                                      // wenn keine Wiedergabe
  {
    playShortCut(1);                        // Spiele Shortcut 1
  }
  ignoreButtonFour = true;                  // LauterTaste übergehen

}                                           // Ende longPress
    
else if (buttonFour.wasReleased())          // wenn Taste  betätigt wurde (shortpress)
{
  if (isPlaying())                          // wenn Wiedergabe läuft
  {
    if (mySettings.invertVolumeButtons)     // wenn Funktion der Vol Tasten  getauscht
    {
      volumeUpButton();                     // Lauter-Taste
      longPressVol = false;                 // schrittweise VolÄnderung durch kurzen Tastendruck
    }
    else                                    // wenn Funktion der Vol Tasten nicht getauscht
    {
      nextButton();                         // Next - Taste
    }
  }
  else                                      // wenn Wiedergabe nicht läuft
  {
    playShortCut(1);                        // shortcut Next-Taste spielen
  }
  ignoreButtonFour = false;                 // Taste wieder auswerten
}                                           // ende shortpress

// ************ Taste 5 ************************************

   if (buttonFive.pressedFor(LONG_PRESS))
   
{
  if (isPlaying())                          // wenn Wiedergabe läuft
  {
    if (mySettings.invertVolumeButtons)     // wenn Funktion der Vol-Tasten getauscht
    {
      longPressVol = true;                  // VolÄnderung durch longPress
      volumeDownButton();                   // Leiser Taste
    }
    else                                    // wenn Funktion der Vol-Tasten nicht getauscht
    {                                       
      previousButton();                     // zurück Taste
    }
  }
  else                                      // wenn keine Wiedergabe
  {
    playShortCut(2);                        // Spiele Shortcut 2
  }
  ignoreButtonFive = true;                  // Leiser Taste übergehen

}                                           // Ende longPress   
else if (buttonFive.wasReleased())          // Taste wurde betätigt (shortpress)
{
  if (isPlaying())                          // wenn Wiedergabe läuft
  {
    if (mySettings.invertVolumeButtons)     // wenn Funktion der Vol Tasten  getauscht
    {
      volumeDownButton();                   // Leiser-Taste
      longPressVol = false;                 // schrittweise VolÄnderung durch kurzen Tastendruck
    }
    else                                    // wenn Funktion der Vol Tasten nicht getauscht
    {
      previousButton();                     // Zurück - Taste
    }
  }
  else                                      // wenn Wiedergabe nicht läuft
  {
    playShortCut(2);                        // shortcut Zurück-Taste spielen
  }
  ignoreButtonFive = false;                 // Taste wieder auswerten   
}                                           // ende shortpress
#endif

  }
  // ****************** Ende der Buttons ***********************************`
1 „Gefällt mir“

Sehr cool, da hatte ich mich schon gewundert, warum das in der 5-Tasten-Version nicht geht, in der 3-Tasten-Version aber schon. Wird heute Abend ausprobiert :+1:

Edit: noch eine dumme Frage: wo füge ich das in der 2.1 DEV am besten ein? Vermutung wäre Zeilen 1012-1092?

Auf jeden fall in der void loop()
wo die Tasten abgefragt vwerden. Du musst den gesamten Part der Tasten ersetzen. Falls Fehler beim Kompilieren auftreten, kann das daran liegen, dass Variablen nicht exakt übereinstimmen (Groß-Kleinschreibung oder ähnliches). dann bitte die Variablendeklarationen für die Buttons vergleichen und ggf korrigieren. Am besten du machst dir in der IDE einmal die unveränderte V.2.1 auf und im neuen Fenster die geänderte. Dann kannst du die Variablen besser vergleichen.

Ich hab das mal verifiziert mit der V1.2 Standartsoftware
Beim Kompilieren wird ein Fehler ausgegeben

bezüglich der Zeilen
longPressVol = false;
oder
longPressVol = true;

Diese Zeilen bitte löschen, da das im Standartscetch eh nicht abgefragt wird.

Wer das in meiner always queue version nutzen wil, darf diese Zeilen nicht entfernen, bekommt aber auch keinen Fehler angezeigt.

Hallo Thomas, bin gerade auf deinen Fork (Stand 02.01.2021) gewechselt. Gibt es neuere Entwicklungen wie z.B. das Thema aus diesem Thread auch auffindbar im Github? Daran wäre ich interessiert.
Außerdem ist mir noch aufgefallen, dass die 5 Buttons bei dir standardmäßig anders definiert sind als beim Ur-Repository von Thorsten (DEV 2.1 19.07.2020). Normalerweise ist die Zuordnung:
Classic Software von Thorsten
A0 - Play
A1 - Vol +
A2 - Vol -
A3 - Next
A4 - Prev

Always Queue:
A0 - Play
A1 - Next
A2 - Prev
A3 - Vol +
A4 - Vol -

Das ist natürlich kein riesiges Problem, weil man es in der Hardware, Software oder im Admin-Menü tauschen kann. Aber es wäre für alle Umsteiger einfacher das wäre so wie bei Thorsten…

Noch zwei letzte Fragen: Ich möchte die Einschaltgeräuschunterdrückung mittels deiner Schaltung mit den zwei IRLML2502 nachbauen. Stören die Mosfets nicht die Audioübertragung zum Lautsprecher? Wieso braucht man zwei Mosfets, reicht nicht einer aus?

PS: Ich nutze die Classic-Platine

VG und danke für deine Arbeit…

Die Widerstände der Mosfets im durchgeschalteten Zustand sind so gering, dass sie keinen hörbaren Einfluss auf das Audiosignal haben. Messtechnisch ließe sich vermutlich ein Einfluss nachweisen, aber da der DF-Player eh kein HiFi-Signal liefert fällt das nicht ins gewicht.
Es werden zwei Mosfets benötigt um den Lautsprecher vollständig für beide Halbwellen des NF signals abschalten zu können. Das ist deshalb nötig, weil intern in den Mosfets eine Diode parallel zu Source und Drain integriert ist . Damit würde immer eine Halbwelle den Mosfet passieren können. Durch die zwei Mosfets in Anti-Serialschaltung werden beide Halbwellen sicher abgeschaltet.
Zu den Tasten schicke ich gleich noch eine Codeergänzung die in der Github-Version noch nicht enthaltejn ist. Diese Codeergänzung geht auf eine Idee von @Gute_Laune zurück, die unabhängig der vorhandenen Tastenzuordnung bei " Ja" die LautstärkeTasten mit den Vor/Zurücktasten tauscht oder zurücktauscht, und bei „Nein“ die Vorhandenen Konfiguration nicht ändert.

So hier noch die Codeänderung

 // ********** Funktion der Lautstärketasten und Vor/Zurücktasten tauschen **************
  else if (subMenu == 5)                                            //905- "Funktion der Vor/Zurücktasten und der Lautstärketasten tauschen
  {
  if (AbbrActive == true)
      return;
      
    int temp = voiceMenu(2, 930, 930, false);                       //930- "Möchtest du die Vor/Zurücktasten mit den  Lautstärketasten tauschen?
                                                                    //Du musst dann die Tasten lange drücken um ein Lied vor oder zurückzugehen.
    if (temp == 1)
    {
      if(mySettings.invertVolumeButtons == false)
      mySettings.invertVolumeButtons = true;                        //931- "Ja
      else
      mySettings.invertVolumeButtons = false;
    }
    else
    {
     
      //mySettings.invertVolumeButtons = false;                       //932- "Nein
    }
  }


  // ********** Lautstärke und EQ Einstellungen ändern *********************
1 „Gefällt mir“

„Bei Thorsten“ ist in diesem Fall relativ. @Thomas-Lehnert bietet ja eine Software für die AiO-Platine und die Classic-Platine an. Bei der AiO-Software von Thorsten ist das auch anders als bei der Classic-Version. Es ist also schwer möglich es beiden Umsteigergruppen recht zu machen. Je nach dem von welcher Version man umsteigt, ist invertVolumeButtons entweder true (Classic) oder false (AiO). Da dieser Wert nur bei einem Reset mit dem Defaultwert aus der neuaufgespielten Software ersetzt wird, kann man es nicht für alle passend machen.

Ich hab deine Idee jetzt mal für meinen TonUINO übernommen. Allerdings habe ich beim Longpress eine Verzögerung in der Lautstärkeänderung ergänzt. Sonst ging mir das ein wenig zu schnell.
Aber die Funktion gefällt mir sehr gut

Gibt es da einen Hinweis wie viele Titel gesprungen wird? Pipton oder sowas?

Nein, das ist nur gefühlsmäßig. Je länger du drückst um so mehr Titel werden übersprungen. Musst du halt ausprobieren.

1 „Gefällt mir“

Also auf meiner Box wird der Track immer ganz kurz angespielt. Dann kann man einfach mitzählen

Ist das dann ein anderer Code, oder unterschiedliches Verhalten auf Grund von … (Gründen)?

Ich hab das von @Thomas-Lehnert zwar nicht kopiert, aber das Prinzip ist das Selbe. Der Unterschied kann schon daher kommen, wie lange der Player braucht, bis er eine Datei abspielt. Das ist von vielen Faktoren abhängig (Anzahl der Dateien, Reihenfolge beim Draufkopieren, …)
Je nachdem wie sich das eigene System da verhält, kann man aber eine Verzögerung ergänzen, sodass dann wieder kurz was abgespielt wird.

@Thomas-Lehnert du hast das Delay bei vor und zurück verkürzt, richtig? Dann kann es natürlich auch daran liegen.

Ja das delay ist verkürzt. Weis jetzt im Moment nicht mehr auf welchen Wert. Aber das hat auf jeden Fall Auswirkungen auf die Anzahl der übersprungenen Tracks. Es sollten ja auch schnell mehrere Tracks übersprungen werden. Wenn jeder Track erst angespielt wird , ist der beabsichtigte Effekt wieder aufgehoben, weil man dann ja auch mehrere Shortpress hintereinander machen kann um den gleichen Effekt zu erreichen.

kann man das bei dir nicht letztendlich auch? Oder gibt es etwas, was schnelles Spulen bei schnellem kurzem Drücken verhindert?

Beim gedrückthalten spart man auf jeden Fall die Reaktionszeit, das funktioniert ja als wenn man immer dann drückt, wenn die Software wieder bereit ist.
Deshalb ist es auch mit dem längeren Delay noch schneller, als wenn ich einzeln Drücke. Da hab ich dann das Delay und die Zeit bis ich wieder drücke.

Wie spult es sich denn mit deinem kurzen Delay im 3 Button-Mode mit spulen auf dem Longpress? Kann man da noch gezielt einen Track vorwärtsspringen oder erwischt man dann auch mehrere?

Wie spult es sich denn mit deinem kurzen Delay im 3 Button-Mode mit spulen auf dem Longpress? Kann man da noch gezielt einen Track vorwärtsspringen oder erwischt man dann auch mehrere?

Nein hier entspricht die Funktion dem Original, heißt es wird immer nur ein Titel weiter oder Zurück geschaltet.

kann man das bei dir nicht letztendlich auch? Oder gibt es etwas, was schnelles Spulen bei schnellem kurzem Drücken verhindert?

Ja das geht.