L'utilisation d'une variable locale est inadaptée.
Une variable locale peut prendre n'importe quelle valeur lors de son instanciation. Dans ton cas, le hasard veut qu'elle soit à zéro.
Cette variable doit être obligatoirement statique.
donc :
boolean checkButton() {
static int score;
if (digitalRead(button) == !HIGH) {
score++;
Serial.print(score);
}
}
et pour compléter la réponse de hbachetti, il est théoriquement nécessaire d'initialiser la variable:
static int score = 0;
L'initialisation a lieu une seule fois, lorsque le processeur execute cette ligne pour la première fois.
Une autre solution consiste à déclarer la variable en dehors de la fonction, comme variable globale...
Théoriquement, le startup de tout programme C initialise toutes les variables statiques et globales à ZÉRO, donc inutile de s’en préoccuper, sauf si l’on a besoin d’une valeur différente.
hbachetti:
Théoriquement, le startup de tout programme C initialise toutes les variables statiques et globales à ZÉRO, donc inutile de s'en préoccuper, sauf si l'on a besoin d'une valeur différente.
Bonjour,
Je pense que ce n'est pas dans la spécification C ou C++.
Effectivement, avec le compilateur de l'IDE, j'ai constaté que les variables statiques et globales étaient initialisées à 0. Sans doute une extension du compilateur.
Cependant, à mon avis il est préférable d'initialiser ces variables si nécessaire.
Durée de vie : Tout le programme.
Initialisation : Une fois.
Variable locale
void function(){
int variable=0;
}
Durée de vie : Le temps d'utilisation de la fonction.
Initialisation : A chaque lecture de la fonction.
Variable locale static
void function(){
static int variable=0;
}
Durée de vie : Tout le programme.
Initialisation : Une fois.
Donc en terme de consommation de RAM, la variable global et local static c'est pareil.
La seul différence est que la variable local static ne peut pas être lu dans une autre partie du programme.