#include <avr/sleep.h>
#include <avr/power.h>
// Définition des broches
const byte LED_PIN1 = 0; // Broche de la LED (PB0)
const byte LED_PIN2 = 1; // Broche de la LED (PB1)
const byte LED_PIN3 = 4; // Broche de la LED (PB4)
const byte BUTTON_PIN = 2; // Broche du bouton (PB2)
// Durée de clignotement en millisecondes
const unsigned long BLINK_DURATION = 200; // Durée d'une demi-période de clignotement (500 ms)
// Nombre total de demi-périodes de clignotement pour 1 minutes
const int NUM_BLINKS = 60; // 1 minute
volatile bool blinkEnabled = false;
volatile byte state = LOW;
void setup() {
pinMode(LED_PIN1, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(0, blink, FALLING);
}
void loop() {
if (blinkEnabled) {
digitalWrite(LED_PIN3, HIGH);
for (int i = 0; i < NUM_BLINKS; i++) {
digitalWrite(LED_PIN1, HIGH);
delay(BLINK_DURATION);
digitalWrite(LED_PIN1, LOW);
delay(BLINK_DURATION);
digitalWrite(LED_PIN2, HIGH);
delay(BLINK_DURATION);
digitalWrite(LED_PIN2, LOW);
delay(BLINK_DURATION);
}
blinkEnabled = false;
digitalWrite(LED_PIN1, LOW); // Assurez-vous que la LED est éteinte à la fin du clignotement
digitalWrite(LED_PIN2, LOW); // Assurez-vous que la LED est éteinte à la fin du clignotement
digitalWrite(LED_PIN3, LOW);
sleepNow(); // Met l'ATtiny85 en mode de sommeil profond
}
}
void blink() {
//state = !state;
// Désactive l'interruption du bouton pour éviter les rebonds
detachInterrupt(0); // Détache INT0 (PB2)
blinkEnabled = true;
// Réactive l'interruption du bouton
attachInterrupt(0, blink, FALLING); // Réattache INT0 (PB2)
}
void sleepNow() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
}