Estoy usando Atmega32A y tengo 2 LED. Aquí paso a paso lo que quiero hacer
- Cuando la MCU está encendida, tengo un LED encendido (PC0)
- Al hacer clic en un botón (PD6), el segundo LED en (PC1) se enciende y el otro se apaga.
- Una función de retardo está retrasando este estado durante 10 segundos. Después de eso, el primer LED (PC0) se enciende, también, durante 5 segundos. En este momento, ambos LED están encendidos.
- Luego 3. se repite.
Lo que quiero hacer es, cuando hago clic en el botón en (PD6) para poder interrumpir / interrumpir el retraso.
Aquí está el código
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRC = 0b11111111; //Makes PORTB as Output
DDRD = 0b00000000; //Makes PORTD as Input
PORTC = 0b11111110; //LEDs
PORTD = 0b11111111; //Button
int pressed = 0;
int Pressed_Confidence_Level = 0;
int Released_Confidence_Level = 0;
while(1){
if(bit_is_clear(PIND, 6)){ //If button is pressed (PD6)
Pressed_Confidence_Level++;
if(Pressed_Confidence_Level > 500){
if(pressed == 0){
if(PINC & (1<<PC0)){
PORTC = 0b11111111; //PC0 LED ON, PC1 LED ON
}
else{
while(1){
PORTC = 0b00000001; //PC0 LED ON, PC1 LED OFF
_delay_ms(600000); //10min
PORTC = 0b11111111; //PC0 LED ON, PC1 LED ON
_delay_ms(300000); //5min
/* How to exit this loop on button press? */
}
}
}
pressed = 1;
}
Pressed_Confidence_Level = 0;
}
}
else{
Released_Confidence_Level++;
if(Released_Confidence_Level > 500){
pressed = 0;
Released_Confidence_Level = 0;
}
}
}
}