const int Nb_Sorties = 3;
const int pinInterruptionDCC = 2; // PB2 (INT0, broche physique 7)
const int pinBP_Adresse = A2; // PB4 (ADC2, broche physique 3)
int pinSortie[Nb_Sorties] = {0, 1, 3}; // PB0 (5), PB1 (6), PB3 (2)
/* pour faire clignoter la led de vérification */
unsigned long dernierTemps = 0; // Stocke le temps précédent
const int intervalle = 500; // Intervalle de clignotement (en ms)
bool etatLED = LOW; // État actuel de la LED
/* =========================================== */
void setup() {
pinMode(pinInterruptionDCC, INPUT_PULLUP);
for (int J = 0; J < Nb_Sorties; J++){
/* Initialisation des pins de sorties */
pinMode(pinSortie[J], OUTPUT);
/* ================================== */
/* Test des connexions */
digitalWrite(pinSortie[J], HIGH);
delay(1000);
digitalWrite(pinSortie[J], LOW);
/*==================== */
} // Fin de for (int J = 0; J < Nb_Sorties; J++)
// Configuration de l'interruption INT0 sur changement d'état
GIMSK |= (1 << INT0); // Active INT0
MCUCR |= (1 << ISC00); // Déclenchement sur tout changement d'état
// Active les interruptions globales
sei();
}
void loop() {
/* Vérification de la bonne exécution du code */
if (millis() - dernierTemps >= intervalle) {
dernierTemps = millis(); // Met à jour le dernier temps
etatLED = !etatLED; // Inverse l'état de la LED
digitalWrite(pinSortie[2], etatLED); // Change l'état de la LED
} // Fin de if (millis() - dernierTemps >= intervalle)
/* ========================================== */
}
ISR(INT0_vect) {
// Ajuste l'état de la LED en fonction du bouton
if (PINB & (1 << pinInterruptionDCC)) {
digitalWrite(pinSortie[0], LOW); // Éteint la LED si le bouton est relâché
} else {
digitalWrite(pinSortie[0], HIGH); // Allume la LED si le bouton est enfoncé
}
}