Einschlaf-Timer

#1

Hallo!

Hier habe ich meine Version des TonUINO vorgestellt und möchte gerne meine Erweiterung zum Einschlaf-Timer mit euch teilen, vielleicht hat ja jemand Interesse an der Funktion.
Erstellt habe ich das vor ca. 3 Wochen, basiert also auf der vorherigen DEV-Branch.

Langes Drücken der Leiser-Taste im 5-Button-Modus schaltet zwichen 30min, 60min und aus.
Nach der angegebenen Zeit wird auf Pause gestellt, wird nun manuell weitergespielt, wird automatisch ein neuer 30-Minuten-Timer aktiviert.

  1. Variablen und Funktionen:
    /// Sleep-Timer: Stop Playing
    unsigned long sleepTimer = 0;
    bool isSleepPause = false;

    void setSleepTimer() {
      unsigned long time;
      unsigned long playId;
      unsigned long curMillis = millis();

      if (sleepTimer == 0 ) {
        time = 30;
      }
      else {
        if (sleepTimer<(curMillis+(29*60000))) time = 30;
        else if (sleepTimer<(curMillis+(59*60000))) time = 60;
        else time = 0; 
      }
      
      switch (time){
        case 0: playId = 965; break;
        case 30: playId  = 963; break;
        case 60: playId = 964; break;
      }

      if(isPlaying()) {mp3.playAdvertisement(playId);}
      else {mp3.playMp3FolderTrack(playId);}

      Serial.print(F("=== setSleepTimer() "));
      if(time > 0) sleepTimer = curMillis + (time * 60 * 1000);
      else sleepTimer = 0;

      Serial.println(sleepTimer);
    }

    void checkSleepTimer() {
      if(sleepTimer != 0 && millis() > sleepTimer) {
        if (isPlaying() ) {
            Serial.println(F(" ---  Sleep-Timer -> PAUSE"));
            sleepTimer = 0;
            isSleepPause = true;
            mp3.pause();
            setstandbyTimer();
            delay(500);
        }
      }
      else if(isSleepPause && isPlaying()) {
          isSleepPause = false;
          setSleepTimer();
      }
    }
  1. im Loop hinter checkStandbyAtMillis();
checkSleepTimer();
  1. Erweiterung Abfrage Button 5:
    if (buttonFive.pressedFor(LONG_PRESS) && !ignoreButtonFive) { 
          setSleepTimer();  
          ignoreButtonFive = true;
      }
    if (buttonFive.wasReleased()) {
      if(!ignoreButtonFive) {
        if (isPlaying()) {
            if (!mySettings.invertVolumeButtons) {
                volumeDownButton();
            }
            else {
                  previousButton();
            }
        }
        else {
            playShortCut(2);
        }
      }
      else 
          ignoreButtonFive = false;
      
    }
  1. Für die Ansagen:
    Hier habe ich einfach die Admin-Menü-Ansagen (963-965) für das Auschalten von mp3 ins advert-Verzeichnis dupliziert.
3 Likes

#2

Moin,

ich bekomme beim Überprüfen des Codes den Fehler: ‘SetStandbyTimer’ was not declared in this scope

muss das so? oder was kann ich tun? Wenn ich daraus “setSleepTimer” mache, geht es ohne Fehlermeldung durch… ist es so einfach?

Grüße und Danke schonmal.

0 Likes

#3

In welche Version hast Du die Erweiterung denn eingebaut?

0 Likes

#4

ich hab mir die GitHub Master Anfang April runtergeladen… also hoffentlich die aktuelle…
der serielle Monitor sagt 0x92 v2.0
gerade dann auch die aktuelle gefunden… also… da ist schon die Antwort von Stephan :smiley:

0 Likes

#5

Die Master is ja einen Asbach Uralt wert. :wink: Die oben angebotene Modifikation basiert auf der DEV. Und bei der gab es seit Anfang April 11 oder 12 commits…

Nope. Ist sie nicht. Also die Master vielleicht. Aber wie gesagt, DEV ist was benötigt wird. :wink:

Das ist die Versionsnummer des RFID Moduls und hat rein gar nichts mit dem Software Stand unserer Firmware zu tun. Also bitte nicht verwechseln.

Ich würde mir eh nicht allzuviel Arbeit machen, die aktuelle DEV hat ebenfalls einen Sleep Timer über eine Modifier Karte. Evtl. ist das ja schon genau das was ihr sucht.

1 Like

#6

Ah, genau, da liegt das Problem. In der aktuellen Master-Version gibt es den Standby-Timer (nicht zu verwechseln mit dem Sleep-Timer) noch gar nicht.

Wie @stephan schon schreibt, in der aktuellen Dev-Version gibt es sowohl den Standby- als auch den Sleep-Timer:

/// Funktionen für den Standby Timer (z.B. über Pololu-Switch oder Mosfet)

void setstandbyTimer() {
  Serial.println(F("=== setstandbyTimer()"));
  if (mySettings.standbyTimer != 0)
    sleepAtMillis = millis() + (mySettings.standbyTimer * 60 * 1000);
  else
    sleepAtMillis = 0;
  Serial.println(sleepAtMillis);
}

Der Standby-Timer schaltet bei Inaktivität nach einer definierten Zeit aus, wohingegen der Sleep-Timer während des Abspielens nach einer vordefinierten Zeit abschaltet.

1 Like

#7

man könnte auch überlegen, ob man die Modifier auch als Shortcuts belegen kann. Ich kann mir das recht charmant vorstellen.

Das ist aber erst mal eine Idee (noch nicht zu Ende gedacht), ich glaube die Bedienung (besonders bei der 3-Button-Lösung) könnte problematisch sein

0 Likes