Snigelen:
Ja jag ser jättegärna exempel.
Det jag är ute efter är att när jag trycker på en knapp så ska den spara positionen som rotary encodern är på, och sedan gå i viloläge.
Sen vill jag ju ha en uppvakningsknapp för detta, som tar den Ur viloläget.
Till och med ennu bättre vore om den kunde spara position och gå ner i viloläge själv efter en viss tids inaktivitet.
Har fått det att "halvfungera", nu kan den om man trycker på en knapp spara sin position och sen gå in i Sleep Mode.
Men trots att jag går via en interrupt (pinne 19 på Arduino MEGA, Ext int 2 tror jag) så vill den inte vakna igen.
Så man måste hard-resetta den.
Här är koden som jag smusslat in ang Sleep Mode
(baserat på
https://arduino.stackexchange.com/quest ... n-mega2560)
Kod: Markera allt
int WakeUpPin = 19; // KNAPP --- Väcker maskinen
int GoToSleepPin = 18; // KNAPP --- Knapp som försätter MEGA i SLEEP MODE - Ext Int 3
Kod: Markera allt
pinMode(WakeUpPin, INPUT); //Declarar denna som input MEGA's input är 19 Knapp - VÄCKER
pinMode(GoToSleepPin, INPUT); //Declarar denna som input MEGA's input är 18 Knapp - Sparar pos och försätter i SLEEP MODE
Kod: Markera allt
{
// pinMode(WakeUpPin, INPUT_PULLUP); // originalraden
// attachInterrupt(2, wakeUpNow, LOW); // originalraden - use interrupt 0 (pin 2) and run function wakeUpNow when pin 2 gets LOW
pinMode(WakeUpPin, INPUT_PULLUP);
attachInterrupt(2, wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function wakeUpNow when pin 2 gets LOW
}
}
// SLEEP MODE - SleepNow måste declareras, raden nedan gör detta, annars blir det 'sleepNow' was not declared in this scope
void sleepNow() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable(); // enables the sleep bit in the mcucr register
sleep_mode(); // here the device is actually put to sleep!!
attachInterrupt(2, wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function
// THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
sleep_disable(); // first thing after waking from sleep: disable sleep...
detachInterrupt(2); // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time.
}
Kod: Markera allt
// ------------------------------------------------------------------------------------------------------------------------******************************************
// ------------------------------------------------------------------------------------------------------------------------******************************************
// -------- Denna ska väcka upp Arduinon från SLEEP MODE --------
{
val = digitalRead(WakeUpPin); // Knapp som sparar position
if (val == HIGH) { // Kollar om knappen är tryckt
// HÄR NEDANFÖR SKA KOD FÖR UPPVÄCKNING LIGGA
wakeUpNow();
sleep_disable(); // first thing after waking from sleep: disable sleep...
detachInterrupt(2); // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time.
delay(750);
lcd.setCursor(0, 1);
lcd.print("ARISE!");
Serial.println("Waking up the machine");
delay(750);
}
}
// ------------------------------------------------------------------------------------------------------------------------******************************************
// ------------------------------------------------------------------------------------------------------------------------******************************************
// -------- SPARAR POSITION OCH FÖRSÄTTER MEGA I SLEEP MODE --------
{
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, 1 ärrad 2 och 1, 0 vore rad 1
lcd.print(PulseCount);
delay(750);
lcd.setCursor(0, 1);
lcd.print("OffOn SLEEP");
Serial.println("Saving Off to On position to memory and initiates SLEEP MODE Zzzz...");
delay(750);
lcd.clear(); // Tömmer skärmen
lcd.setCursor(1, 0); // Visar Goodbye... på första raden av LCD
lcd.print("Goodbye..."); // Sista meddelandet innan den stänger ner
delay(750); // Väntar lite
lcd.clear(); // Tömmer skärmen
// SOV FUNKTION HÄRUNDER
sleepNow(); // Aktiverar SLEEP MODE - Kommer behöva interrupt wake up för att vakna från detta
}
}