Bonjour,
Débutant complet, tel le bambin faisant château branlant ses premiers pas, j'ai entrepris de réaliser un montage présenté dans "Arduino : premiers pas en informatique embarquée" (page 172 et suiv.). Il s'agit d'utiliser un bouton-poussoir pour commander l'allumage d'une led. J'ai suivi scrupuleusement les instructions, une led protégée par une résistance 220 ohms, un bouton-poussoir doté d'une résistance de "pull-up" et d'un condensateur pour limiter "l'effet rebond", et un petit programme tout simple : lorsque le bouton est enfoncé, la lampe s'éclaire, lorsqu'il est relâché, elle s'éteint. Cela fonctionne parfaitement (mais que d'efforts pour allumer une loupiote !)
Là où les choses se sont compliquées, c'est lorsque j'ai eu l'idée (saugrenue ?) de mettre une seconde led sur mon installation, avec l'idée que les deux pourraient s'allumer et s'éteindre en alternance selon l'état du bouton. J'ai donc branché une seconde led, avec exactement le même dispositif, mais sur une autre broche de l'Arduino, bien sûr, avec un programme tout bête :
const int bouton = 3; //le bouton est connecté à la broche 3
const int led1=10; // la led 1 est connectée à la broche 10
const int led2=11; // la led 2 est connectée à la broche 11
int etatBouton; // variable qui enregistre l'état du bouton
void setup() {
pinMode(led1, OUTPUT); // la led 1 est une sortie
pinMode(led2, OUTPUT); // la led 2 est une sortie
pinMode(bouton, INPUT); // le bouton est une entrée
etatBouton = HIGH; // on initialise l'état du bouton comme "relâché"
}
void loop() {
etatBouton = digitalRead(bouton); // rappel : bouton = 3
if (etatBouton == HIGH) // test si le bouton a un niveau logique haut
{
digitalWrite(led1, HIGH); // la led 1 s'allume
digitalWrite(led2, LOW); // la led 2 est éteinte
}
else (etatBouton == LOW); // si le bouton a un niveau logique différent de HIGH
{
digitalWrite(led1, LOW); // la led 1 est éteinte
digitalWrite(led2, HIGH); // la led 2 s'allume
}
}
Ça fonctionne, disons… à moitié. La première led réagit parfaitement, s'allume et s'éteint sans problème. La seconde en revanche, reste toujours à moitié allumée alors qu'elle devrait s'éteindre complètement, mais elle réagit tout de même et s'illumine de tout son éclat lorsque c'est son tour de briller. Disons que la première réagit à 0% et 100%, la seconde seulement à 50% et 100%. J'ai tout essayé, changer les led, les mettre sur des breadbords séparées, changer les bornes de l'Arduino, même changer d'Arduino, changer le bouton, changer la valeur des résistances et du condensateur, rien à faire. En désespoir de cause, j'ai supprimé le bouton-poussoir, sa résistance et son condensateur, pour établir et couper le contact manuellement avec un cavalier. Tiens ! Tu rêves, mon gars ! Cette laide led reste toujours à moitié allumée.
Le circuit réduit à sa plus simple expression, j'en déduis qu'il ne s'agit pas d'un problème matériel, de connexion ou de branchement. Les led fonctionnent parfaitement avec un programme simple ne faisant pas appel au "if" "else" ou "bouton", elles s'allument et s'éteignent alternativement ou simultanément, avec un enthousiasme qui réjouit le cœur et elles s'éteignent complètement lorsqu'on le leur demande.
Je voudrais comprendre, bon sang ! Il n'y a plus de bouton ! Lorsque je relie les bornes avec un fil électrique, le circuit est fermé, non ? Et lorsque j'ôte le fil, il est ouvert. Ça fonctionne bien comme un interrupteur ! Il faut qu'une porte soit ouverte ou fermée, disait Musset (et vous avez le bonjour d'Alfred). J'ai l'impression que pour une de mes led, la porte est toujours entrebâillée...
Merci d'avoir lu, merci pour vos commentaires, vos suggestions, vos solutions, et surtout vos explications, mille excuses aux spécialistes pour la naïveté de ce message (mais bon, je suis en ce domaine comme l'enfant qui découvre les lettres dans son abécédaire). Si je n'ai pas la solution, je n'irai pas me fiche à l'eau, c'est certain, mais tout ça risque fort de finir à la poubelle.
Cordialement