Quellcode Fragen

Wer nicht auf Thorstens nächste Version warten kann, hier meine Lösung für Volume Min/Maxqt1%20-%20Copyqt_3 qt2%20-%20Copy

8 „Gefällt mir“

@Dennis
Sobald ich deine Zeilen einfüge, stoppt der Kompiliervorgang bei der Zeile resetCard();

irgendeine Idee?

Du hast wahrscheinlich irgendwo eine { oder } zu viel oder zu wenig.

Mhh, seltsam. Hast Du wirklich 1:1 übertragen? Mit allen Semikolons?

Ich hatte das Problem auch die letzten Tage, da half nur die Funktion oben im Code zu initialisieren bevor das setup kommt. Also als: void resetCard(void) ;

Bitte nicht falsch verstehen, aber als Programmierer tut die Aussage weh :wink:

Was du da machst ist es die Funktion zu deklarieren. (Das macht man damit der Compiler weiß, dass es eine Funktion mit diesem Namen gibt. Den selben Effekt hat es, wenn die komplette Funktion im Quellcode über allen stellen steht, an denen sie aufgerufen wird.)

Sorry für die falsche Wortwahl😁 ja stimmt das hieß Deklarieren… Und ja die ganze Funktion nach oben ziehen geht natürlich auch. Ich überlege aber schon eine Weile alle Funktionen in eine seperate Datei auszulagern.

@Dennis

Ja, hatte ich. Merkwürdig.

Magst du vielleicht einfach deinen Code per copy&paste posten?
In "vorformatierter Text" Tags?

Dank dir

Carsten

// DFPlayer Mini
SoftwareSerial mySoftwareSerial(2, 3); // RX, TX
uint16_t numTracksInFolder;
uint16_t currentTrack;
uint8_t volume;
…
// DFPlayer Mini initialisieren
mp3.begin();
mp3.setVolume(15);
volume = 15;
…
if (upButton.pressedFor(LONG_PRESS)) {
  if (volume < 23) {
    Serial.println(F("Volume Up"));
    mp3.increaseVolume();
      volume = mp3.getVolume();
    Serial.println(volume);
    ignoreUpButton = true;
  } else {
    ignoreUpButton = true;
  }
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    nextTrack(random(65536));
  else
    ignoreUpButton = false;
}
if (downButton.pressedFor(LONG_PRESS)) {
  if (volume > 3) {
    Serial.println(F("Volume Down"));
    mp3.decreaseVolume();
      volume = mp3.getVolume();
    Serial.println(volume);
    ignoreDownButton = true;
  } else {
    ignoreDownButton = true;
  }
} else if (downButton.wasReleased()) {
  if (!ignoreDownButton)
    previousTrack();
  else
    ignoreDownButton = false;
}

Hoffe das hilft Dir. Ansonsten hat Thorsten diese Funktion bestimmt in seiner nächsten Version drin.

1 „Gefällt mir“
if (upButton.pressedFor(LONG_PRESS)) {
  if (volume < 23) {
    Serial.println(F("Volume Up"));
    mp3.increaseVolume();
      volume = mp3.getVolume();
    Serial.println(volume);
    ignoreUpButton = true;
  }

Hier fehlt am Ende eine geschweifte klammer wie ich das sehe.

Im letzten Post von @Dennis fehlt keine geschweifte Klammer. Da ist alles in Ordnung.

Aber die if upButton Bedingung wird vor dem Else nicht geschlossen und das Else bezieht sich dann auf die untere if volume Abfrage…

Und ist ja auch richtig so. Genau wie in dem zweiten IF Block auch. Das sieht man auch an der Einrückung…

Stimmt😔 nicht richtig gelesen… Sorry für die Verwirrung.

Ist kein Problem, wurde ja geklärt! :wink:

Ich habe die ganze Diskussion zur neuen Firmware dahin verschoben wo sie hingehört.

Bekomme die Fehlermeldung:

Arduino: 1.8.8 (Windows Store 1.8.19.0) (Windows 10), Board: „Arduino Nano, ATmega328P“

Der Sketch verwendet 15286 Bytes (49%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 519 Bytes (25%) des dynamischen Speichers, 1529 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x54
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x6f
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x6e
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x55
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x49
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x4e
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x4f
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x20
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x56
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x65
Beim Hochladen des Sketches ist ein Fehler aufgetreten

Dieser Bericht wäre detaillierter, wenn die Option
„Ausführliche Ausgabe während der Kompilierung“
in Datei → Voreinstellungen aktiviert wäre.

Im ersten Versuch würde ich die Einstellungen für Controller, Programmer, COM-Port und Baudrate überprüfen.

Kam bei mir wenn ich bei Bootloader nicht “ATmega328P (Old Bootloader)” gewählt hatte.

Funktioniert 1a und erhöht die Langlebigkeit der Lautsprecher :wink: