Hur man lagrar en momentan knapptryckning som ett menyval (4 / 4 steg)
Steg 4: Förenklad version som inte använder EEPROM
Om du letar efter en enklare lösning för att göra ett menyval från en knapp och behöver inte bevara urvalet under återställer eller makt cykel, är här det med EEPROM grejer bort:
#define NUMSELECTIONS 4
globala variabler
int currentSelection = 0;
booleska button1Pressed = 0;
booleska previousButton1Pressed = 0;
osignerade långa debounceCount;
osignerade långa blinkMillis;
unsigned int blinkInterval;
void setup() {
pinMode (12, INPUT_PULLUP).
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (13, OUTPUT);
digitalWrite (2, 1);
digitalWrite (3, 1);
digitalWrite (4, 1);
digitalWrite (5, 1);
digitalWrite (13, 1);
slå på lampan för urval
digitalWrite (currentSelection + 2, 0);
} / / slutet av installationen
void loop() {
läsa på knappen inte oftare än en gång varje 20 ms, debouncing
om (millis() > 20 & & debounceCount < millis() - 20) {
debounceCount = millis();
button1Pressed =! digitalRead(12);
}
Om knappen har tryckts, öka och lagra urval
om (previousButton1Pressed! = button1Pressed) {
previousButton1Pressed = button1Pressed;
endast vidta åtgärder när knappen trycks, inte när släppt
om (button1Pressed) {
stänga av lampan för gamla val
digitalWrite (currentSelection + 2, 1);
currentSelection ++;
currentSelection % = NUMSELECTIONS;
slå på lampan för nya val
digitalWrite (currentSelection + 2, 0);
Serial.Print ("aktuell markering");
Serial.println(currentSelection);
}
}
Här är i slingan där vi kan göra olika saker beroende på
Vad valet gjordes med knappen.
I detta fall blinka vi Arduino ombord LED med olika intervaller
beroende på valet.
Detta visar också huvudloop bearbetning utan dröjsmål blockering.
om (currentSelection == 0) {
Dim LED av blinkar det snabbt, bit-banka PWM
om (digitalRead(13)) {
blinkInterval = 0;
}
annat {
blinkInterval = 10;
}
}
annat if (currentSelection == 1) {
Blinkar en gång per sekund
blinkInterval = 500.
}
annat if (currentSelection == 2) {
Blinka var 2 sekunder
blinkInterval = 1000;
}
annat if (currentSelection == 3) {
Snabb blixt var 1,5 sekunder, detta också lite-banka PWM, mycket långsam
om (digitalRead(13)) {
blinkInterval = 50;
}
annat {
blinkInterval = 1450;
}
}
om (millis() > blinkInterval & & blinkMillis < millis() - blinkInterval) {
blinkMillis = millis();
digitalWrite (13,! digitalRead(13));
}
} / / end av loop