Stap 4: Ontwikkeling van de code
Mijn code is hieronder. Zoals we omgaan met mechanicals hier, die jou kan verschillen. Probeer af te spelen over met de constante ontdendering en de constante 'hoe lang we wachten alvorens het uitgaande van de wijzerplaat is voltooid roteren'.
Ik heb geprobeerd om het zo netjes mogelijk commentaar te leveren. Hopelijk is het vrij eenvoudig.
int needToPrint = 0;
int count;
int in = 2;
int lastState = laag;
int trueState = laag;
lange lastStateChangeTime = 0;
int uitgeschakeld = 0;
constanten
int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;
VOID Setup
{
Serial.begin(9600);
pinMode (in, INPUT);
}
void loop
{
int lezing = digitalRead(in);
Als ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
de wijzerplaat is niet wordt gekozen, of net klaar is wordt gekozen.
Als (needToPrint) {}
Als het klaar is pas wordt gekozen, moeten we het nummer van de seriële afgeven
lijn en reset de telling. We mod de telling door 10 omdat '0' 10 pulsen stuurt.
Serial.Print (graaf 10%, DEC);
needToPrint = 0;
Graaf = 0;
uitgeschakeld = 0;
}
}
Als (lezen! = lastState) {}
lastStateChangeTime = millis();
}
Als ((millis()-lastStateChangeTime) > debounceDelay) {}
ontdendering - dit gebeurt zodra het wordt gestabiliseerde
Als (lezen! = trueState) {}
Dit betekent dat de schakelaar ofwel gewoon verdwenen uit gesloten heeft -> open of vice versa.
trueState = lezing;
Als (trueState == HIGH) {}
_ / / verhogen de telling van de pulsen als het hoge gegaan.
Graaf ++;
needToPrint = 1; We moeten dit getal afdrukken (zodra de wijzerplaat heeft gebeëindigd draaien)
}
}
}
lastState = lezing;
}