Je débute avec Arduino, j'ai un petit problème tout simple que je n'arrives pas à solutionner:
voici mon code:
boolean test;
boolean preced;
void setup()
{
Serial.begin(9600);
pinMode(6, INPUT);
preced=false;
}
void loop()
{
test = digitalRead(6);
if ( test != preced);
{
Serial.println(test);
preced = test;
}
}
J'aimerais que ne sorte sur le port série que les changements d'états de la pin 6, or, la, ça me sort en continu soit 0 soit 1 en fonction de l'état de la broche, c'est pourtant simple mais je ne vois pas où je me suis trompé.
Merci par avance pour vos éclaircissements.
David
Super, ça fonctionne bien maintenant.
Pour la pull up, elle est en hard, je suis électronicien, donc ça, je maitrise...
Pour bien comprendre, le fait de mettre ce fameux ; à la fin de l'instruction if, lui fait ignorer la ligne ( puisque ça me sortait bien l'état de la broche mais en continu ) mais ne ressort pas en erreur à la compilation ?
Il va falloir que je me fasse à ce langage de prog
Merci pour vos réponses rapide
David
en C++ le ; marque la fin d'une expression (un statement en anglais)
Une expression vide est acceptée vous pouvez écrire
void loop() {
;;;;;;;;;
}
ça va compiler sans souci (et en rien faire bien sûr)
la syntaxe d'un SI c'est
if (condition) expression-si-vrai
donc en écrivant
if ( test != preced);
l'expression qui est exécuté si la condition est vraie et l'expression vide
ensuite en C++ il y a la notion de compound statement (expression composée) qui permet de grouper entre accolades plusieurs expressions pour n'en faire qu'une seule
donc
{
expression1
expression2
expression3
}
est une expression de type "composée" qui regroupe trois expressions
le compilateur quand il voit cela exécute les expressions les unes après les autres
Pour revenir au if, c'est pour cela qu'on met des {} si on a plusieurs choses à faire si l'expression est vraie parce que la syntaxe ne supporte qu'une seule expression à éxecuter
if (condition) expression-si-vrai
donc en mettant une paire d'accolades, on a fabriqué une expression (qui va contenir toutes les expressions que l'on veut)
au final votre code donc faisait if ( test != preced) ; // --> ne rien faire
puis enchaînait toujours avec ce groupe d'expressions
{
Serial.println(test);
preced = test;
}
cerise sur le gateau, comme l'optimiseur du compilateur a dû voir que le if ne servait à rien, il l'a sans doute viré carrément
PS/
elle existe directement dans le micro-processeur, on peut l'activer par