Tauschen der Lautstärke Funktion

Hallo zusammen,

meine Kinder lieben den TonUino, leider haben sie Probleme die Lautstärke zu verändern. Ich würde gerne die Funktion der Lauter/ Leiser Knöpfe tauschen. Sprich kurzes drücken lauter / leiser und langes drücken nächster / vorheriger Song. Ich habe bereits versucht es im Code zu drehen, jedoch bin ich eher ein Einsteiger Skript Kiddi und habe kene Ahnung von proggen. Beim kompelieren meldet er dann immer das “else” eine “{” erwartet. Könnte mir da jemand helfen?

Hi,
poste doch die entsprechenden Zeilen (am besten als Vorformatierter Text formatiert). Vielleicht kannst du dich auch mit dem Compiler einigen und ihm die geschweifte Klammer geben, wenn er drauf besteht…?

Grüße Philip

(((-:

Hihi… Compiler: „Ich will aber eine Klammer“ - TheSaint: „Nix da, die behalte ich!“

org.

if (upButton.pressedFor(LONG_PRESS)) {
  Serial.println(F("Volume Up"));
  mp3.increaseVolume();
  ignoreUpButton = true;
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    nextTrack(random(65536));
  else
    ignoreUpButton = false;
}

meine Idee, welche aber nicht geht

if (upButton.pressedFor(LONG_PRESS)) {
  nextTrack(random(65536));
  ignoreUpButton = true;
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    Serial.println(F("Volume Up"));
    mp3.increaseVolume();
  else
    ignoreUpButton = false;
}

:joy:
war auch mein erster Gedanke

ah. hinter dem if (!ignoreUpButton) hast du zwei Zeilen, wo vorher nur eine war. Man kann auf die geschweiften Klammern verzichten, wenn danach nur eine Zeile (durch Semilolon abgeschlossen) kommt. Hier musst du Klammern einsetzen. s.https://www.arduino.cc/reference/en/language/structure/control-structure/if/

The brackets may be omitted after an if statement. If this is done, the next line (defined by the semicolon) becomes the only conditional statement.

Hi, Ich habe das so abgeändert… Achtung myDFPlayer. == mp3. UND es wurde eine max_Volume abfrage eingefügt für den Betrieb mit Kopfhörern etc.

 if (pauseButton.wasReleased()) {
      if (ignorePauseButton == false){
        if (isPlaying()){
          myDFPlayer.pause();}
        else{
          myDFPlayer.start();}
      ignorePauseButton = false;
    } else if (pauseButton.pressedFor(LONG_PRESS) && ignorePauseButton == false) {
      if (isPlaying()){
        myDFPlayer.advertise(track);}
      else {
        knownCard = false;
        myDFPlayer.playMp3Folder(800);
        Serial.println(F("Karte resetten..."));
        resetCard();
        mfrc522.PICC_HaltA();
        mfrc522.PCD_StopCrypto1();
      }
      ignorePauseButton = true;
    }
 }
    if (upButton.pressedFor(LONG_PRESS)) {
      //Serial.println(F("Volume Up"));
      //myDFPlayer.volumeUp();
      nextTrack();
      ignoreUpButton = true;
    } else if (upButton.wasReleased()) {
      if (!ignoreUpButton){
        //nextTrack();
        if(myDFPlayer.readVolume() <= max_Volume){
          myDFPlayer.volumeUp();
          }
      }else{
        ignoreUpButton = false;}
    }

    if (downButton.pressedFor(LONG_PRESS)) {
      //Serial.println(F("Volume Down"));
      //myDFPlayer.volumeDown();
      previousTrack();
      ignoreDownButton = true;
    } else if (downButton.wasReleased()) {
      if (!ignoreDownButton)
        //previousTrack();
        myDFPlayer.volumeDown();
      else
        ignoreDownButton = false;
    }

@ anku & Christopher
Danke für die Hilfe. Läuft nun.

@Thorsten
Wäre das umschalten der Tastenfunktion eine mögliche Option für das Admin Menü?

Für alle “meinen” Code:

if (upButton.pressedFor(LONG_PRESS)) {
  nextTrack(random(65536));
  ignoreUpButton = true;
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton) {
    Serial.println(F("Volume Up"));
    mp3.increaseVolume();
  }
  else
    ignoreUpButton = false;
}

if (downButton.pressedFor(LONG_PRESS)) {
  previousTrack();
  ignoreDownButton = true;
} else if (downButton.wasReleased()) {
  if (!ignoreDownButton) {
    Serial.println(F("Volume Down"));
    mp3.decreaseVolume();
  }
  else
    ignoreDownButton = false;
}

Also meine Stimme hätte der Vorschlag. War mit das erste was ich in meiner Firmware gedreht habe. Das man das einstellbar macht wäre praktisch IMHO.

1 „Gefällt mir“

Admin Menu oder oben im Quelltext per Variable setzen, fänd ich zumutbar. Ich habe es auch getauscht.

@TheSaint, habe den alten Code durch Deinen Auschnitt-Code ersetzt ,nun kann ich jetzt mit kurzen Druck laut und leiser stellen, aber die Funktion vorwärts und zurück funktioniert nicht mehr. Dachte durch langen Druck, kann ich den nächsten Track anwählen, ist irgenwie ausser Kraft gesetzt.
Was muss ich noch ändern?

Schau doch mal bei Thorstens DEV-Version,
da gibt es diese Funktion jetzt auch.

Also bei mir funktioniert das vor und zurück springen noch, jedoch gibt es einen Nachteil mit der Variante:
Beim langen drücken der Tasten springt er mehrere Tracks vorwärts, da es scheinbar “mehrmals” interpretiert wird. Daher baue ich alle Boxen (es sind 3 im Moment) auf Drehregler um. Ob dieses Verhalten in der DEV auch so ist weiß ich nicht. Mögich wäre auch das meine Taster prellen.

EDIT:

Ich habe das vorhin nur kurz vom Handy rein getippt, hier jetzt der Passende Code ausschnitt. Bitte nicht irritiren lassen das da nicht mp3.* steht sondern “myDFPlayer.*”, das kommt von der Portierung auf den ESP32.

if (upButton.pressedFor(LONG_PRESS)) {
      //Serial.println(F("Volume Up"));
      //myDFPlayer.volumeUp();
      nextTrack();
      ignoreUpButton = true;
      delay(1000);
    } else if (upButton.wasReleased()) {
      if (!ignoreUpButton){
        //nextTrack();
        if(myDFPlayer.readVolume() <= max_Volume){
          myDFPlayer.volumeUp();
          }
      }else{
        ignoreUpButton = false;}
    }

if (downButton.pressedFor(LONG_PRESS)) {
      //Serial.println(F("Volume Down"));
      //myDFPlayer.volumeDown();
      previousTrack();
      ignoreDownButton = true;
      delay(1000);
    } else if (downButton.wasReleased()) {
      if (!ignoreDownButton)
        //previousTrack();
        myDFPlayer.volumeDown();
      else
        ignoreDownButton = false;
    }

Hm, bleibt bei mp3.advertise stehen, Was muss ich noch ändern?

Laut der Fehlermeldung unten gibt es diese Funktion nicht in der Verwendeten Klasse. Ich habe jetzt mal in die DFMiniMp3.h geschaut die du verwendest und dort ist der Name wie folgt:

  // sd:/advert/####track name
    void playAdvertisement(uint16_t track)

du musst also mp3.advertise(track) durch mp3.playAdvertisement(track) ersetzen.

und Ich habe gesehen das du die Lautstärkelimitierung mit kopiert hast, das könnte dann die nächste Fehlermeldung sein falls du die Variable nicht oben im Code mit z.Bsp.: int max_Volume = 20 deklariert hast.

Genau. Im Admin-Menü kann man es einfach tauschen.

@Thorsten, ich würde gern die DEV-Version mit den Laustärketasten tauschen ausprobieren, habe heute morgen die neuste Version runtergeladen. Nun zu meinem Problem, wie ich ins Admin-Menü komme weiß ich aber wie speichere die neue Funktion ab. Welche Taste muss ich dazu drücken und wie komme ich aus dem Admin-Menü wieder raus?

Oh :wink:

Mit den vor/zurück Tasten navigieren und mit Play/Pause bestätigen .

Nach einer Option bist du aktuell wieder aus dem Adminmenü raus

Hallo zusammen,
ich habe aktuell meinen zweiten Tonuino fertig gestellt. Würde auch gerne die Tastenbelegung ändern.
Verstehe aber beim besten Willen nicht, wie ich in das Admin Menü komme.
Wenn ich alle Tasten gleichzeitig drücke, kommt bei mir die Ansage " O.k, ich habe den Vorgang abgebrochen"
Was mache ich falsch?