ShutdownTimer mit Power-Switch

Ich wollte auch noch einen einfachen Shutdown-Timer implementieren, finde die Cubiekid-Lösung
mit einer externen Bibliothek aber recht kompliziert.

@ChristianHermes Könntest Du vielleicht bitte doch einmal versuchen Deine Umsetzung zu posten?

Ist doch alles auf GitHub:

1 „Gefällt mir“

Danke Stephan!
Ich bewundere Eure Programmierkünste!

Puh, wird aber wirklich aufwendig die Timer in Thorstens Code zu übernehmen.

Hehe, nicht umsonst hatte @ChristianHermes ja geschrieben:

Da ich meine Software komplett umgebaut habe, ist leider keine direkte Integration in Thorstens Projekt möglich.

Aber davon ab, „im Prinzip“ musst du dir nur einmal die millis merken und dann regelmäßig prüfen wieviel Zeit vergangen ist. Bei entsprechenden Aktionen halt millis neu merken (=timer neu starten). Wenn deine Zielzeit erreicht ist die entspreche Aktion ausführen.
Ob du das zu Fuß machst, oder mit einer Library ist Dir überlassen. Ob sich das lohnt steht auf nem anderen Blatt, wenn das irgendwann in der original Firmware eh auch drin ist.

Wenn die Genauigkeit nicht exakt sein muss könnte man doch einfach eine Variable beim Start mit einem (hohen) Wert setzen und bei jedem Loop-Durchgang -1 abziehen. Bei null wird dann ausgeschaltet.

1 „Gefällt mir“

In der kommenden Firmware ist das soweit vorgesehen:

void setSleepTimer() {
  if (mySettings.sleepTimer != 0)
    sleepAtMillis = millis() + (mySettings.sleepTimer * 60000);
}

void disableSleepTimer() {
  sleepAtMillis = 0;
}

void checkSleepAtMillis() {
  if (sleepAtMillis != 0 && millis() > sleepAtMillis) {
    // enter sleep state
  }
}
1 „Gefällt mir“

Mission Accomplished! : D

Sehr smart Thorsten, für den Timer die millis()-Funktion zu verwenden!

Nachdem ich die “checkSleepAtMillis”-Funktion in den großen Loop eingebaut hatte,
hat sich der TonUINO wunschgemäß nach der eingestellten Zeit abgeschaltet.

Über einen langen Druck der Play-/Pause-Taste lässt er sich zusätzlich manuell ausschalten.
Aufwecken geht auch über den Play-/Pause-Button.

Genau so hatte ich mir das alles vorgestellt!

Hey Dennis,

hab bei mir auch eine Sleep-Funktion per Timer mit millis() eingebaut, allerdings pausiere ich die MP3-Wiedergabe nach abgelaufener voreingestellter Zeit bisher nur. Durch Drücken von Play kann die Wiedergabe dann wieder gestartet werden. Den Arduino schlafen schicken und mit Play Drücken oder Karte auflegen wieder aufwecken wäre natürlich die bessere Lösung. Kannst du kurz beschreiben, welche Funktion du dafür benutzt und wie du das umgesetzt hast? Danke.

Mfg DS

Habe bei mir den Pololu-Switch wie folgt angeschlossen:

Dann habe ich Thorstens-Standby-Timer oben verwendet und noch etwas ergänzt:

   void checkStandbyAtMillis() {
    if (sleepAtMillis != 0 && millis() > sleepAtMillis) {
     // enter sleep state

// Bis bald abspielen
mp3.playMp3FolderTrack(501);
delay(3000);

// TonUINO auschalten
Serial.println(F("Force shutdown…"));
digitalWrite(shutdownPin, HIGH);
 }
}

du brauchst halt noch:

  • den Pololu Switch
  • den Play/Pause Button anders verkabeln und anders im Setup definieren
  • ein Kabel zwischen dem shutdownPin und dem Pin auf dem Pololu

Ich werde mir das Thema auch am WE bzw. spätestens in den Ferien mal anschauen. Aktuell plane ich auch diverse Pull-Up Stromversorgungen zu testen und dann eine entsprechende Anleitung zu erstellen.

Alles klar, danke für die Rückmeldungen. Den Switch werde ich mir nächstes Jahr mal anschauen, da wollen wir sowieso ein komplettes Redesign inklusive eigener Platine machen. Bis Weihnachten muss erstmal die einfache Umsetzung mit Pause reichen :sunglasses: