Et pour faire s'éteindre la led automatiquement au bout de quelques secondes voici une possibilité en modifiant mon précédent code:
#define TEMPO 3000
unsigned long dernier_evenement = millis();
void loop()
{
for(byte i = 0; i < sizeof(broche_bp); ++i) { // On scan chaque boutons
if( digitalRead(broche_bp[i]) == HIGH ) { // Si le boutons est appuyé
digitalWrite( broche_led[last_pressed], LOW ); // on éteint la LED précédente, marche aussi si la précédente est la même que la courante
last_state = (i != last_pressed) || !last_state;
if ( last_state ) // on allume la led si différente de la précédente OU si le précédent état est éteint
digitalWrite( broche_led[i], HIGH );
last_pressed = i; // on mémorise la dernière led qui a changé
dernier_evenement = millis();
while ( digitalRead(broche_bp[i]) == HIGH ); // on attend le relaché
break; // on sort du for
}
}
if ( (millis() - dernier_evenement) >= TEMPO )
{
digitalWrite( broche_led[last_pressed], LOW );
last_state = false;
}
}