Hallo zusammen,
scheinbar stehe ich mit dem Arduino Leonardo und der Sleep Mode Funktion
auf Kriegsfuß. Habe folgenden Code:
#include <avr/sleep.h>
#include <avr/power.h>
int pin3 = 3;
/***************************************************
* Name: pin3Interrupt
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Service routine for pin2 interrupt
*
***************************************************/
void pin3Interrupt(void)
{
/* This will bring us back from sleep. */
/* We detach the interrupt to stop it from
* continuously firing while the interrupt pin
* is low.
*/
detachInterrupt(0);
}
/***************************************************
* Name: enterSleep
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Enters the arduino into sleep mode.
*
***************************************************/
void enterSleep(void)
{
/* Setup pin3 as an interrupt and attach handler. */
attachInterrupt(0, pin3Interrupt, LOW);
delay(100);
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
sleep_mode();
/* The program will continue from here. */
/* First thing to do is disable sleep. */
sleep_disable();
}
/***************************************************
* Name: setup
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Setup for the Arduino.
*
***************************************************/
void setup()
{
Serial.begin(9600);
/* Setup the pin direction. */
pinMode(pin3, INPUT_PULLUP);
pinMode(13, OUTPUT);
//digitalWrite(pin2, HIGH);
Serial.println("Initialisation complete.");
}
/***************************************************
* Name: loop
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Main application loop.
*
***************************************************/
int seconds=0;
void loop()
{
delay(1000);
seconds++;
digitalWrite(13,HIGH);
Serial.print("Awake for ");
Serial.print(seconds, DEC);
Serial.println(" second");
if(seconds == 10)
{
Serial.println("Entering sleep");
digitalWrite(13,LOW);
delay(200);
seconds = 0;
enterSleep();
}
}
Das hoch zählen klappt wunderbar, dann geht scheinbar auch ganz
kurzfristig ind die if-Schleife, springt aber sofort wieder heraus und
zählt wieder hoch. Eigentlich ist es doch so programmiert, dass er nur
bei einem LOW an PIN3 aus dem Sleep zurück kommt, oder habe ich einen
Fehler?
Eigentlich habe ich ein klein bisschen was vor, ich will mit dem Arduino
ein paar Code Pattern heraus schicken und wenn dies erledigt ist, soll
dieser in den PWR_DOWN sleep und erst mit einem Power-on-reset wieder
aufwachen. Die oben stehenden Zeilen sind für mich eigentlich erstmal
ein Test, ob das mit dem sleep funktioniert. Ich sehe im Code eigentlich
keinen Fehler, zusätzlich habe einmal probiert von außen den Pin3 auf
HIGH zu legen und über einen Taster nach GND und ein zweiter Versuch war
mit dem Befehl INPUT_PULLUP, wie beschrieben beides ohne erwünschten
Erfolg.
Hat jemand zum Code oben oder zu meiner eigentlichen Umsetzung Rat?