Regarde la bibliothèque simpleBouton et ses exemples. La méthode vientDEtreEnfonceOuRelache() me semble capter un changement d'état.
Si cette bibliothèque n'est pas adaptée aux interrupteurs (mais il faut tester pour le savoir), il te faut utiliser une variable qui stocke l'état précédent. La loop devient :
void loop() {
etat1 = digitalRead(bouton1);
if (etat1 != ancienEtat1 ) allLeds(RED);
ancienEtat1 = etat1;
// etc ...
}
Et tu définis une variable ancienEtat1 comme tu définis etat1.
Au passage, ton code peut être optimisé en utilisant des tableaux.
Au lieu de
int etat0=0;
int etat1=0;
int etat2=0;
int etat3=0;
int etat4=0;
int etat5=0;
tu peux faire
#define N 5 // 5 variables
int etat[N] = {0};
Pareil pour les pins des boutons
int bouton[N] = {9, 10, 11, 12, 13};
Tu peux ensuite faire des boucles for, par exemple pour les pinMode:
for (int i=0, i<N; i++) pinMode(bouton[i],INPUT_PULLUP);
Et aussi pour la surveillance de tes boutons dans la loop:
for (int i=0; i<N; i++) {
etat[i] = digitalRead(bouton[i]);
if (etat[i] != ancienEtat[i] ) allLeds(couleur[i]);
ancienEtat[i] = etat[i];
}
Il faudra alors définir un tableau de couleurs. Je connais mal la bibliothèque Adafruit_NeoPixel mais je pense que les couleurs sont codées sur des entiers en 32bits. Par exemple, une utilisation de la fonction que tu emploies est:
void setPixelColor(uint16_t n, uint32_t c);
et la couleur est 'c' codée en uint32_t (entier 32 bits non signé).
Donc tu peux définir un tableau de couleurs
uint32_t couleur[N] = { ... };
et y mettre les valeurs de tes couleurs
En utilisant un colorpicker, comme celui de Google tu peux connaitre les valeurs 32bits des couleurs
Exemple, tu places le point en haut à droite (sur le rouge) et tu obtiens : #ff0000 sous 'HEX'. Pour le vert, tu peux prendre #00ff00, etc
Il faut ensuite traduire ces valeurs en hexa compréhensible par arduino : pour ça tu changes le # en 0x
- 0xff0000
- 0x00ff00
- etc
Ton tableau devient
uint32_t couleur[N] = { 0xff0000, 0x00ff00, 0x0000ff, etc... };
Là j'ai mis rouge, vert, bleu.