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?
{
//--- 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
}
}
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)
{
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
}
}
// 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
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.
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.
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?