Arduino - dubbel funktionsknapp - Long Press/kort tryck (utan fördröjning) + Bonus (4 / 6 steg)
Steg 4: Programvaran i detalj del 2
Nu för loopen. Jag kommer att dela upp bit för bit, att förklara vad som händer. Det första programmet kommer att göra läses statligt av knappen. Detta ger oss koden nedan och och att vi kan skapa funktioner för både FN-pressade och pressade stater, kom ihåg att funktionen Tryck kort på händer vid knappen release.
om (digitalRead(button) == hög) {
Knappen intryckt
} annat {
-Knappen inte
}
I knappen intryckt avsnitt, är det första vi kommer att göra testa buttonActive variabel, på set-up detta är falskt. Om detta är för närvarande falska, innebär detta att programmet är att upptäcka knappen trycks för första gången. Detta beror på att efter behandlingen falskt vi omedelbart sätta den till sann och bara släppa knappen kan sätta den rygg till false. Vi också protokollföra tiden knappen trycktes först.
om (buttonActive == false) {
buttonActive = sant;
buttonTimer = millis();
}
Nästa steg inom knappen intryckt avsnitt, är att testa hur länge vi har hållit på knappen för. Vi gör detta genom att testa den aktuella tiden, subtrahera tiden först tryckt i millisekunder och jämför det med hur lång tid vi önskar tills långt knapptryck aktiveras.
Vi kontrollera även att longPressActive boolean är falsk, eftersom när vi har aktiverat funktionen långt tryck vi kommer att ställa denna boolean true stop upprepar aktiveringen. När vi har hållit på knappen för önskad tid, kommer vi singla tillståndet för den LED1State boolean som i sin tur kommer att vända pin lampan kopplas till hög eller låg därmed.
om ((millis() - buttonTimer > longPressTime) & & (longPressActive == false)) {
longPressActive = sant;
LED1State =! LED1State;
digitalWrite (LED1, LED1State);
}
Röra på att knappen inte intryckt avsnitt i koden. Det första vi kommer att kontrollera är om buttonActive boolean är sant. Om det är sant, koden looping för första gången sedan knappen släpptes. Det kommer då uppsättning booleska tillbaka till false till koden ovan för att upptäcka knappen trycks igen.
om (buttonActive == true) {
buttonActive = false;
}
Inom den ovan om uttalande, som vi upptäcka den första öglan när knappen släpper, vi nästa ska kontrollera om långt tryck funktionen aktiverades, vilket kommer att ge upp två möjliga åtgärder. Om långt tryck aktiverades kommer vi helt enkelt skapa longPressActive tillbaka till false om du vill låta programmet tryck länge på en gång. Om det inte var aktiverad vi kommer att vända statligt av andra LED som vi gjorde med först.
om (longPressActive == true) {
longPressActive = false;
} annat {
LED2State =! LED2State;
digitalWrite (LED2, LED2State);
}