Timer / räknare istället för knapp? Arduino MEGA

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Hej!

Jag har en funktion nedan för att försätta MEGA'n i Sleep Mode, LCD'n stängs även av.
Men kom på att det vore ju smidigare om detta sköttes själv istället för med en knapp (som man kan glömma trycka på).
Så istället för koden för knapp, så är jag ute efter en simpel timerfunktion som helt enkelt kör vidare med Sleep Mode koden
efter att en viss tid av inaktivitet passerat.

Någon som skulle kunna peka mig i rätt riktning gällande detta? :)

Kod: Markera allt

{

//--- Här skulle kod med timer behövas sättas in och ersätta de två raderna nedan

    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);                                                      // Bestämmer vart texten ska synas på LCDn
      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
    }
  }
Användarvisningsbild
Klas-Kenny
Inlägg: 11325
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av Klas-Kenny »

Ha någon variabel typ "unsigned long timeAtLastActivity", sen vid varje aktivitet så kör

Kod: Markera allt

timeAtLastActivity = millis();
Sen för kontrollen

Kod: Markera allt

if(millis() - timeAtLastActivity > TIMEOUT_IN_MS) {
   // Go to sleep
}
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Klas-Kenny:

Tack!

Har testat lite nu, men maskinen går i Sleep Mode direkt, fastän jag skriver if(millis() - timeAtLastActivity > 5000);
så väntar den inte 5 sekunder?
Shimonu
Inlägg: 294
Blev medlem: 21 oktober 2015, 22:44:33

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av Shimonu »

Du ska ju inte ha semikolon efter villkoret

.
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av svanted »

if((millis() - timeAtLastActivity) > 5000)
{





}
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Hmmm, sätter jag den på 5000 så händer inget alls, sätter jag den på 500 så går den till sleep Direkt.
Har även testat skriva det såhär if((millis() - timeAtLastActivity) > 5000)
:humm:

Kod: Markera allt

  {
if(millis() - timeAtLastActivity > 5000)                         //--- Här skulle kod med timer behövas sättas in och ersätta de två raderna nedan
{

    // 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
    }
  }
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Inte så att jag måste aktivera något bibliotek för att använda millis funktionen?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av johano »

Hur och var sätter du timeAtLastActivity ?
Det finns en måsvinge alldeles ovanför din if(millis() - timeAtLastActivity > 5000), vad härrör den till?
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Johano: Jag har skrivit den som Klas-Kennys exempel högre upp i tråden.

Kod: Markera allt

// Bland alla long och int
unsigned long timeAtLastActivity;


// Funktionen nedan där jag vill att timern ska kicka in efter en viss tid, den ska alltså gå i sleep mode efter en stunds inaktivitet.
  {
if((millis() - timeAtLastActivity) > 5000)
// if(millis() - timeAtLastActivity > 5000)                      //--- Här skulle kod med timer behövas sättas in och ersätta de två raderna nedan
{

    // 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
    }
  }



// -- Åka upp knappen, om den används vill jag att timern resettar sig
  {

// -- Timer
timeAtLastActivity = millis();
    
    int valfast = digitalRead(HighSpeed1Pin);            // Åker UPP snabbt
    int valslow = digitalRead(SlowSpeed1Pin);            // Åker UPP långsamt
    if (valfast == HIGH || valslow == HIGH)              // Checkar om knappen trycks
    {
      if (valfast == HIGH)
        analogWrite(controlPin2, 255);                   // 255 är PWM som blir 5V ut, denna ser till att motorn snurrar snabbt/100%
      else if (valslow == HIGH)
        analogWrite(controlPin2, 210);                   // Valfri siffra, denna går långsammare
      lcd.setCursor(0, 1);                               // -------- Dessa rader visar UP när uppåtknapp trycks UPP
      lcd.print("Up");
      Serial.println("Going up");
      delay(10);                                         // Delay ställer flimret men slöar också ner visningen av pulsräkningen

Shimonu
Inlägg: 294
Blev medlem: 21 oktober 2015, 22:44:33

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av Shimonu »

Åh, jösses
X-IL
EF Sponsor
Inlägg: 8265
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av X-IL »

Du får nog försöka klippa i koden så det går att se om du gjort rätt eller fel.
Det du visar oss nu kommer inte att kompilera. Det KlasKenny visade var ju ett exempel, detta måste ju så klart läggas in på rätt sätt i koden, nu när vi ser "orpahned" måsvingar och grejer så har vi ingen aning om vad du gjort.
Användarvisningsbild
ffredrik
Inlägg: 341
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av ffredrik »

Jag har sagt det sedan länge; detta kommer aldrig att gå väl..

Grundkurs rekommenderas.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av johano »

Posta programmet i sin helhet, du har nu klippt bort massa saker som är högst väsentliga för att förstå vad programmet gör och
framförallt varför det *inte* gör det du vill/tror att det ska göra.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av fosfor »

Okok ska återkomma med hela koden.
Men jag undrar, denna rad har skrivits på två olika sätt från två olika personer här.

if((millis() - timeAtLastActivity) > 5000)
vs
if(millis() - timeAtLastActivity > 5000)

Spelar det ingen roll hur detta skrivs eller?
Eller var det bara en miss från något håll.
X-IL
EF Sponsor
Inlägg: 8265
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: Timer / räknare istället för knapp? Arduino MEGA

Inlägg av X-IL »

ffredrik>>> Alla är vi barn i början. Skadar inte att vara lite ödmjuk.

fosfor>>> Nej, i det specifika fallet spelar det inte nån roll vilket av dem man skriver. - operatorn har förtur framför jämförelsen. se t ex: https://en.cppreference.com/w/c/languag ... precedence
Det är mes stor sannolikhet nån annanstans det inte är riktigt rätt. Men en grej som någon såg tidigare men som du verkar ha tagit bort nu var ditt semikolon direkt bakom IF-satsen, detta borde visserligen ge en kompilatorvarning, men i övrigt så skulle det kunna betyda "Om det här stämmer, gör ingenting", vilket nog inte var det du ville?
Skriv svar