Étape 4: Développer le code
Mon code est ci-dessous. Comme nous avons affaire avec mécanique ici, vôtre peut être différente. Essayez de jouer la constante debounce et la constante "combien de temps nous attendre avant d’entrer en dial a fini de tourner".
J’ai essayé de commenter il aussi soigneusement que possible. J’espère que c’est assez simple.
int needToPrint = 0 ;
int count ;
int in = 2 ;
int lastState = faible ;
int trueState = faible ;
long lastStateChangeTime = 0 ;
autorisé d’int = 0 ;
constantes
int dialHasFinishedRotatingAfterMs = 100 ;
int debounceDelay = 10 ;
void setup()
{
Serial.Begin(9600) ;
pinMode (in, entrée) ;
}
void loop()
{
lecture int = digitalRead(in) ;
Si ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
le cadran n’est pas composé, ou vient de terminer le composé.
Si {(needToPrint)
Si c’est à peine fini composé, il faut envoyer le numéro dans la série
ligne et réinitialisez le compte. Nous mod le comptage par 10 parce que « 0 » enverra 10 impulsions.
Serial.Print (Nbre % 10, DEC) ;
needToPrint = 0 ;
Count = 0 ;
effacée = 0 ;
}
}
Si (lecture! = lastState) {}
lastStateChangeTime = millis() ;
}
Si ((millis()-lastStateChangeTime) > debounceDelay) {}
Debounce - cela arrive une fois qu’il est stabilisé
Si (lecture! = trueState) {}
Cela signifie que le commutateur soit juste allé de fermé a -> ouvrir ou vice versa.
trueState = lecture ;
Si (trueState == HIGH) {}
incrémenter le compteur d’impulsions si il est allé en haut.
Count ++ ;
needToPrint = 1 ; Nous aurons besoin d’imprimer ce nombre (une fois le cadran rotatif)
}
}
}
lastState = lecture ;
}