Simple timerfunktion?

Hi!

I now have a button that activates sleep mode on my arduino mega.
But i would like to change this code for a code with a timer, so it goes to sleep mode automatically
after a certain times of inactivity.

Does anyone here have a simple code for this? Doesnt need to be anything advanced.

The code snippet for where I would like to have this timer is here below.
(This code just saves a rotary encoders position, and then goes to sleep).

  {
if((millis() - ?                     //---  HERE I WOULD LIKE TO HAVE A TIMER
{

    // val = digitalRead(GoToSleepPin);                            // Knapp som sparar position och går in i SLEEP MODE
    // if (val == HIGH) {                                          // Kollar om knappen är tryckt


      UserStopPulseCount4 = PulseCount;                         //
      EEPROM.put(24, UserStopPulseCount4);                      // Skriver PulseCount numret till minnet, adressen är 24
      EEPROM.put(28, UserStopPulseCount4 + 1);                  //
      lcd.setCursor(0, 1);                                      // Dessa två rader skriver till LCD, 0, är första eller andra rad ,3 är hur långt bort bokstaven placeras från vänster
      lcd.print(PulseCount);
      delay(750);
      Serial.println("Saving Off to On position to memory and initiates SLEEP MODE Zzzz...");
      lcd.clear();                                              // Tömmer skärmen
      lcd.setCursor(3, 1);                                      // Visar Zzzz... på andra raden av LCD
      lcd.print("Zzzzzzz...");                                  // Sista meddelandet innan den stänger ner
      delay(1050);                                              // Hur länge meddelandet visas på skärmen
      lcd.noDisplay();                                          // Stänger av LCD, men inte belysningen
      lcd.noBacklight();                                        // Stänger av belysningen - Fungerar!
      sleepNow();                                               // Aktiverar SLEEP MODE
    }
  }
if (millis() - lastActivityTime >= requiredPeriod)
  {
    //do stuff when the required period ends  
  }

The part to get it to sleep is pretty easy:

  if((millis() - activityMillis >= ActivityInterval){                     //---  HERE I WOULD LIKE TO HAVE A TIMER

    // val = digitalRead(GoToSleepPin);                            // Knapp som sparar position och går in i SLEEP MODE
    // if (val == HIGH) {                                          // Kollar om knappen är tryckt


      UserStopPulseCount4 = PulseCount;                         //
      EEPROM.put(24, UserStopPulseCount4);                      // Skriver PulseCount numret till minnet, adressen är 24
      EEPROM.put(28, UserStopPulseCount4 + 1);                  //
      lcd.setCursor(0, 1);                                      // Dessa två rader skriver till LCD, 0, är första eller andra rad ,3 är hur långt bort bokstaven placeras från vänster
      lcd.print(PulseCount);
      delay(750);
      Serial.println("Saving Off to On position to memory and initiates SLEEP MODE Zzzz...");
      lcd.clear();                                              // Tömmer skärmen
      lcd.setCursor(3, 1);                                      // Visar Zzzz... på andra raden av LCD
      lcd.print("Zzzzzzz...");                                  // Sista meddelandet innan den stänger ner
      delay(1050);                                              // Hur länge meddelandet visas på skärmen
      lcd.noDisplay();                                          // Stänger av LCD, men inte belysningen
      lcd.noBacklight();                                        // Stänger av belysningen - Fungerar!
      sleepNow();                                               // Aktiverar SLEEP MODE
    }
  }

Only now it's up to you to update 'activityMillis' every time there is activity :slight_smile:

Hoy!

Thank you so much! I actually tried a very simple one but didnt get it to work,
it looked like this if (millis() - timeAtLastActivity > 9000)

But I changed it to this like in your example so now it shut off after a while instead :slight_smile: perfect!

if (millis() - timeAtLastActivity >= 9000)

BUT!
Now I noticed that I would need a command to reset this counting when i press the Wake Up
button :open_mouth:
Any nice command for this too?

activityMillis = 0;

Unikron:
BUT!
Now I noticed that I would need a command to reset this counting when i press the Wake Up
button :open_mouth:
Any nice command for this too?

activityMillis = 0;
sleepNow();

Nope:

timeAtLastActivity  = millis();

You don't reset it, you update it :slight_smile:

And yeah, you need the right before or after sleep as well in order to not sleep again right away.

You guyes are my heeeeroes! :slight_smile:
Thank you!