Bonjour à tous.
Je rencontre un nouveau problème dans mon projet.
J'ai besoin de connecter 4 interrupteurs ON/OFF à mon arduino UNO et de récupérer leur état.
Suite à mes tests avec un interrupteur, aucun problème pour récupérer l'état LOW et HIGH.
Par contre, je rencontre malheureusement un soucis lorsque j'en branche plusieurs.
Quel que soit le bouton sur lequel j'appuie, tous les IO ont l'air de recevoir le changement de signal, car mon output est toujours "Interrupteur 1 appuyé" ou "Interrupteur 1 relâché".
J'utilise le mode "INPUT_PULLUP" afin d'utiliser les résistances internes et ne pas avoir à en ajouter en externe.
Le câblage appliqué à tous mes boutons sont basés sur ce schéma :
J'utilise respectivement les broches I/O D2, D3, D4 et D5 pour mes interrupteurs.
J'ai vu que la longueur des câbles pouvait être un problème, mais pour ma part, ils font 15cm grand maximum.
J'ai aussi lu que la librairie bounce2.h demandait d'instancier un objet "bounce" par interrupteur afin d'éviter les problèmes, donc j'ai écris mon code en ce sens :
#include <Bounce2.h>
#include <Adafruit_PWMServoDriver.h>
//Déclarations pour les interrupteurs
const byte buttonPins[] = {2,3,4,5};
Bounce interrupteurs[sizeof(buttonPins)];
void setup()
{
Serial.begin(9600);
int cpt = 0;
for (byte i = 0; i < sizeof(buttonPins); i++) {
pinMode(buttonPins[i], INPUT_PULLUP); // Configure la broche avec la résistance de tirage
interrupteurs[cpt].attach(buttonPins[i]); // Attache l'objet 'inter' à la même broche
interrupteurs[cpt].interval(5); // temps de latence entre deux mesures d'état
cpt = cpt + 1;
}
}
// Variable qui va contenir l'état courant du bouton
// On commence avec -1 qui est un état inconnu...
int courant[] = {-1,-1,-1,-1};
void loop()
{
for (int i = 0; i < sizeof(buttonPins); i++) {
// Mise à jour de l'état de inter : bouton pressé ou non ?
interrupteurs[i].update();
// Récupération de l'état du bouton
int valeur = interrupteurs[i].read();
// Si la valeur n'a pas changé depuis la dernière fois, ne rien faire.
if (valeur == courant[i])
return;
// Agir en fonction de l'état du bouton
if ( valeur == HIGH ) {
Serial.print("Interrupteur ");
Serial.print(i + 1);
Serial.println(" relaché");
}
else {
Serial.print("Interrupteur ");
Serial.print(i + 1);
Serial.println(" appuyé");
}
courant[i] = valeur;
}
}
Pour autre test, avec un code ou j'instancie uniquement un interrupteur avec un objet bounce sur un I/O (D2 par exemple) tout en laissant mes autres interrupteurs câblés sur les I/O D3, D4 et D5, même si j'appuie sur un bouton se trouvant sur un I/O non instancié (D3, D4 ou D5), et bien ma fonction "broche_d2.read()" détecte un changement d'état...
Sauriez-vous ce que j'ai pu mal comprendre dans tout cela, car je sèche avec mon faible niveau en électronique encore un fois ![]()
Merci par avance pour vos retours ![]()


