Stap 4: De Software in Detail deel 2
Nu voor de lus. Ik ga dit breken van beetje bij beetje, om uit te leggen wat er gaande is. Het eerste ding dat het programma zal doen is de status van de knop lezen. Dit geeft ons de onderstaande code en en laten toe om functies voor zowel on-gedrukt en geperst Staten, te maken Vergeet niet dat de kort indrukken functie op de knop versie gebeurt.
if (digitalRead(button) == HIGH) { //Button pressed } else { //Button not pressed }
In de sectie ingedrukte knop, is het eerste wat dat we zullen doen testen de buttonActive variabele, op set-up dit is onjuist. Als dit momenteel onwaar is, betekent dit dat het programma is het opsporen van de knop wordt ingedrukt voor de eerste keer. Dit is omdat na lezing onwaar die wij onmiddellijk het ingesteld op true, en alleen het vrijgeven van de knop terug op false stellen kunt. Wij registreren ook de tijd die de knop voor het eerst werd ingedrukt.
if (buttonActive == false) { buttonActive = true; buttonTimer = millis(); }
De volgende stap binnen de sectie ingedrukte knop, is om te testen hoe lang we de knop voor hebben gehouden. We doen dit door het testen van de huidige tijd, af te trekken van de tijd eerst gedrukt in milliseconden en vergelijk dat met de lengte van de tijd die wij wensen tot de lange pers is geactiveerd.
We controleren dat ook de longPressActive Boole is vals, omdat zodra we de lange druk-functie hebt geactiveerd we deze boolean trouw stop herhalen activering wordt ingesteld. Zodra we de knop voor de gewenste keer hebben gehouden, zullen we de staat voor de LED1State boolean die zal op zijn beurt het wegknippen van de pin die de LED is gekoppeld aan hoge of lage dienovereenkomstig spiegelen.
if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) { longPressActive = true; LED1State = !LED1State; digitalWrite(LED1, LED1State); }
Verplaatsen op de knop niet ingedrukt sectie van de code. Het eerste wat we zullen controleren is als de buttonActive Boolean-waarde geldt. Als het is ingesteld op true, de code is in een lus voor de eerste keer sinds de knop werd uitgebracht. Het zal dan set de Boolean-waarde terug op false om de code hierboven om te ontdekken de knop opnieuw worden ingedrukt.
if (buttonActive == true) { buttonActive = false; }
Binnen de bovenstaande als verklaring, als we de eerste lus na knop release zijn opsporen, we gaan volgende controleren als lang indrukken functie is geactiveerd, die twee mogelijke stappen zal geven. Als lange druk werd geactiveerd zullen we gewoon de longPressActive ingesteld terug op false aan opdat het programma kan druk nogmaals lang op. Als het niet was geactiveerd, wij de staat van de tweede LED zal wegknippen, zoals wij met deden de eerste.
if (longPressActive == true) { longPressActive = false; } else { LED2State = !LED2State; digitalWrite(LED2, LED2State); }