Je commence juste sur l'Arduino Uno, je me suis amusé à faire clignoté des led dans tous les sens, ok ça marche. ET là je me dis je vais rajouter un interrupteur.
Ben là ça ne marche pas.
a) Quand je regarde des exemples de programmes d'arduino, tout simples, la première chose que je vois, ce sont des commentaires décrivant le câblage (écrire que "// la patte 8 de l'arduino est reliée à un poussoir/interrupteur dont l'autre côté est relié à la masse " ne ferait pas de mal, et simplifierait la vie quand un montage devient complexe)
b) si vous voulez changer la patte de votre interrupteur, une déclaration, avant le setup, du type
const int BOUTON=8;
ou (un peu moins bien) #define BOUTON 8 vous simplifera la vie
c) beaucoup de gens initialisent la vitesse de transmission de la voie de debugging à 9600 bauds; on peut la porter sans aucune difficulté à 115200 (si on craint beaucoup de bugs ou si on espère transmettre plein de choses)
d) votre boucle scrute à toute vitesse l'interrupteur/bouton; mettre une pause de 0.5 secondes vous laisserait le temps de lire
Un programme sommaire, tenant compte de presque toutes ces critiques, serait de la forme
// test de bouton, relié à la patte 8 et à la masse
//
const int BOUTON = 8;
void setup() {
pinMode(BOUTON, INPUT_PULLUP); // préconisé par Kamil
Serial.begin(115200); // vitesse maximale tolérée, tant par les PC que les RPi
}
void loop() {
int value = digitalRead(BOUTON);
Serial.println(value);
delay(500); // voir blinkwithoutDelay plus tard
}
L'IDE Arduino dispose d'une console série qui affiche des données (nombres ou texte) mais aussi d'un traceur série qui permet de faire des courbes. Avec ton code (en passant de 9600 à 115200 baud) ou celui de dbrion (sans le delay) tu peux voir ce qu'il se passe lorsque tu appuies sur le bouton, par exemple les rebonds.
Je n'ai fait qu'infliger des modifications cosmetiques au code originel, et rajouter l'initialisation par "tirage vers le haut " proposée par Kamil (modif qui n'a rien de cosmétique).
Le delay (500) permet de cacher tous -presque- les rebonds : ça donne une impression que "ça marche" (alors que tirer vers une valeur logique donnée ne résout pas le problème des éventuels rebonds).
La boucle loop, avec un baud rate de 115200 bits (soit 10 000 caractères par seconde) a un goulet d'étranglement lié à la transmission de 3 caractères (0, \n, \r) et dure à peu près 300 microsecondes.
J'espère que le traceur série (qui est une "nouveauté" assez jolie ) sera assez rapide pour montrer d'éventuels jolis rebonds (c'est plus interessant que de les cacher, et l'idée de lesept est très bonne IMO).
Ce traceur serie est accessible dans la partie du menu dédiée à la gestion de la console série: de toutes façons, nunental devra reconfigurer sa vitesse de transmission.... et peut donc la trouver, ou protester.