Arduino sleep and wakeup with analog Input A1

Helle I want to wake up an Arduino with pin A1 of the Arduino

Show us the code you have so far.

How deep of a sleep do you need? What power consumption are you designing for?

Unless this is a low-power battery project, you don't need sleep. Tell us what you are really trying to do.

I want to build a watch. The watch Is powered over an coincell.
I used a standalone Atmega328p

Her Is the Code
#include <avr/sleep.h>

#define INT_PIN 2
#define LED_PIN 13

void INT_PINisr(void)
/* ISR fuer Pin 2 /f
{
/
detach Interrupt, damit er nur einmal auftritt */
detachInterrupt(0);
}

void enter_sleep(void)
{
attachInterrupt(0, INT_PINisr, LOW);
/* Arduino schlafen legen */
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
}

void setup()
{
Serial.begin(9600);
Serial.println("Starte ...");
/* Pin 2 als Interrupt-Pin, Pullup einschalten */
pinMode(INT_PIN, INPUT);
digitalWrite(INT_PIN, HIGH);
pinMode(LED_PIN, OUTPUT);
Serial.println("Init erfolgt ...");
delay(100);
}

void loop()
{
/* warten, bis der Interrupt-Eingang wieder frei ist /
while (digitalRead(INT_PIN) == LOW)
{
Serial.println("
** Taste loslassen **");
delay(500);
}
Serial.println("Gehe schlafen ...");
delay(100);
/
LED umschalten und wieder schlafen */
digitalWrite(LED_PIN, ! digitalRead(LED_PIN));
enter_sleep();
Serial.println("Bin aufgewacht ...");
delay(100);
}

The analog inputs can generate wake-up interrupts because they have a comparator. It is rarely used but may be useful to you. Basically the comparator compares two inputs and raises the interrupt when one is higher than the other.

A quick google found this tutorial at fiz-ix Nick Gammon has a tutorial too.

One of the reasons why it is rarely used is that for maximum power savings, you usually turn off the chip's analog subsystem. So all the analog inputs are dead during sleep. Nick Gammon's power page shows that the ADC is the biggest power consumer in sleep mode.

Thank you for the answere. Can you tell me how i can integrade it in my Code.

I want it to be in this Code. Please tell me how i can do it

int LCD = 0 ;
int stunden10 = 0 ;
int stunden = 0 ;
int minuten10 = 0 ;
int minuten = 0 ;
int RTCmin = 0;
int RTCst = 0;
int Temp = 0;
int Temp10 = 0;
int Temperature = 0;
#include <DS3231.h>

DS3231 rtc(SDA, SCL);

Time t;
void Anzeige();

void setup()
{
ADCSRA = ADCSRA & B01111111; // ADC abschalten, ADEN bit7 zu 0
ACSR = B10000000; // Analogen Comparator abschalten, ACD bit7 zu 1

pinMode( 4 , OUTPUT);
pinMode( 11 , OUTPUT);
pinMode( 10 , OUTPUT);
pinMode( 7 , OUTPUT);
pinMode( 8 , OUTPUT);
pinMode( 9 , OUTPUT);
pinMode( 12 , OUTPUT);
pinMode( 13 , OUTPUT);
pinMode( 3 , OUTPUT);
pinMode( 6 , OUTPUT);
pinMode( 2 , OUTPUT);
pinMode( 5 , OUTPUT);
Serial.begin(9600);
rtc.begin();
rtc.setTime(20,19 , 00); // Set the time to 12:00:00 (24hr format)

}

void loop()
{
CLKPR = 0x80;
CLKPR = 0x04;

if (( ( digitalRead(15) ) == ( HIGH ) ))
{

CLKPR = 0x80;

CLKPR = 0x10;

digitalWrite( 4 , HIGH );
t = rtc.getTime();
RTCst = t.hour, DEC;
RTCmin = t.min, DEC;
stunden = RTCst %10;
stunden10 = RTCst /10;
minuten = RTCmin %10;
minuten10 = RTCmin /10;
Temperature = (rtc.getTemp());
Temp = Temperature %10;
Temp10 = Temperature /10;

LCD = stunden10 ;
Anzeige();
Serial.print(LCD);
delay( 1000 );
digitalWrite( 4 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
delay( 200 );
LCD = stunden ;
Anzeige();
Serial.print(LCD);
digitalWrite( 3 , HIGH );
digitalWrite( 6 , HIGH );
delay( 1000 );
digitalWrite( 3 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
delay( 200 );
LCD = minuten10 ;
Anzeige();
Serial.print(LCD);
digitalWrite( 2 , HIGH );
delay( 1000 );
digitalWrite( 2 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
delay( 200 );
LCD = minuten ;
Anzeige();
Serial.print(LCD);
digitalWrite( 5 , HIGH );
digitalWrite( 6 , LOW );
delay( 1000 );
digitalWrite( 5 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
delay( 500 );
LCD = Temp10 ;
Anzeige();
Serial.print(LCD);
digitalWrite( 2 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , HIGH );
digitalWrite( 5 , HIGH );
delay( 1000 );
digitalWrite( 2 , LOW );
digitalWrite( 3 , LOW );
digitalWrite( 4 , LOW );
digitalWrite( 5 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
delay( 200 );
LCD = Temp ;
Anzeige();
Serial.print(LCD);
digitalWrite( 5 , HIGH );
digitalWrite( 4 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 2 , HIGH );
digitalWrite( 6 , LOW );
delay( 1000 );
digitalWrite( 5 , LOW );
digitalWrite( 4 , LOW );
digitalWrite( 3 , LOW );
digitalWrite( 2 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 7 , LOW );
digitalWrite( 8 , LOW );
digitalWrite( 9 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
}
}

void Anzeige()
{
if (( ( LCD ) == ( 0 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 12 , HIGH );
}
if (( ( LCD ) == ( 1 ) ))
{
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
}
if (( ( LCD ) == ( 2 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 3 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 4 ) ))
{
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 12 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 5 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 12 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 6 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 12 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 7 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
}
if (( ( LCD ) == ( 8 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 8 , HIGH );
digitalWrite( 9 , HIGH );
digitalWrite( 12 , HIGH );
digitalWrite( 13 , HIGH );
}
if (( ( LCD ) == ( 9 ) ))
{
digitalWrite( 11 , HIGH );
digitalWrite( 10 , HIGH );
digitalWrite( 7 , HIGH );
digitalWrite( 12 , HIGH );
digitalWrite( 13 , HIGH );
}
}

Please use code tags. The forum software eats some of your code if you don't.

See the "How to use this forum" post at the top of every sub-forum if you're not sure.