Rotary telefon uppringning till en Arduino-gränssnitt (4 / 6 steg)
Steg 4: Utveckla koden
Min kod är nedan. Som vi arbetar med mekanik här, kan din variera. Prova att spela med debounce konstanten och "hur länge vi vänta innan förutsatt att ratten har avslutat roterande" konstant.
Jag har försökt att kommentera det så snyggt som jag kan. Förhoppningsvis är det ganska enkelt.
int needToPrint = 0;
int antal;
int i = 2;
int lastState = låg;
int trueState = låg;
lång lastStateChangeTime = 0;
int rensat = 0;
konstanter
int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;
void setup()
{
Serial.BEGIN(9600);
pinMode (i, ingång);
}
void loop()
{
int läsa = digitalRead(in);
om ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {
ratten är inte som rings eller har precis avslutat som rings.
om (needToPrint) {
om det är just färdigt som rings, måste vi sända ner följetongen
linje och återställa räkningen. Vi mod räkningen vid 10 eftersom '0' skickar 10 pulser.
Serial.Print (antal % 10, DEC).
needToPrint = 0;
Count = 0;
rensat = 0;
}
}
om (läsa! = lastState) {
lastStateChangeTime = millis();
}
om ((millis()-lastStateChangeTime) > debounceDelay) {
Debounce - detta händer när det är stabiliserats
om (läsa! = trueState) {
Detta innebär att växeln har antingen bara gått från stängda -> Öppna eller vice versa.
trueState = behandlingen.
om (trueState == hög) {
öka antalet pulser om det är gått hög.
greve ++;
needToPrint = 1; Vi kommer att behöva skriva ut detta nummer (när ratten är klar roterande)
}
}
}
lastState = behandlingen.
}