Az áramkör és a programkód utóélete
Nagyon sok hasznos tanácsot kaptam tőletek a poszt hozzászólásai között, ami arra ösztönzött, hogy továbbgondoljam a projektet. RGB LED-re cseréltem a négy különálló LED-et, optimalizáltam a kódot főként a memóriafoglalás csökkentése miatt. A tanácsok alapján elhagytam a nyomógomb lenyomása után a delay-el történő várakozást és "debounce" megoldást alkalmaztam. A továbbfejlesztett programkód:
//felső gomb +#define buttonPin1 5//alsó gomb -#define buttonPin2 2
//zöld LED#define ledZold 12//piros LED#define ledPiros 9//kék LED#define ledKek 11
byte emberekSzama = 0; // Kezdeti érték
Hirdetés
// Gomb állapot tárolásbool lastButtonState1 = HIGH; // Az előző állapot (button 1)bool lastButtonState2 = HIGH; // Az előző állapot (button 2)bool button1Pressed = false; // Gomb 1 nyomásának figyelésebool button2Pressed = false; // Gomb 2 nyomásának figyelése
// Debounce változók (unsigned int - 16 bit, elég a kis időintervallumhoz)unsigned int lastDebounceTime1 = 0; // Az utolsó gombnyomás ideje (gomb 1)unsigned int lastDebounceTime2 = 0; // Az utolsó gombnyomás ideje (gomb 2)byte debounceDelay = 50; // Debounce késleltetés (50 ms)
void zoldenVilagit() { digitalWrite(ledPiros, 0); digitalWrite(ledZold, 255); digitalWrite(ledKek, 0);}
void sarganVilagit() { digitalWrite(ledPiros, 255); digitalWrite(ledZold, 255); digitalWrite(ledKek, 0);}
void pirosanVilagit() { digitalWrite(ledPiros, 255); digitalWrite(ledZold, 0); digitalWrite(ledKek, 0);}
void kekenVilagit() { digitalWrite(ledPiros, 0); digitalWrite(ledZold, 0); digitalWrite(ledKek, 255);}
void gombok() { switch (emberekSzama) { case 0: kekenVilagit(); break; case 1: zoldenVilagit(); break; /* case 7: zoldenVilagit(); break; case 8: sarganVilagit(); break; case 9: sarganVilagit(); break; case 10: pirosanVilagit(); break;*/ case 2: sarganVilagit(); break; case 3: pirosanVilagit(); break; }}
void setup() { pinMode(ledZold, OUTPUT); pinMode(ledPiros, OUTPUT); pinMode(ledKek, OUTPUT);
pinMode(buttonPin1, INPUT_PULLUP); // Gomb 1 pinMode(buttonPin2, INPUT_PULLUP); // Gomb 2 /* //LED teszt, egyesével felkapcsolás, majd lekapcsolás //zöld zoldenVilagit(); delay(1000); //sárga sarganVilagit(); delay(1000); //piros pirosanVilagit(); delay(1000); //kék kekenVilagit(); delay(1000); */}
void loop() { // Olvassuk be a gombok aktuális állapotát bool buttonState1 = digitalRead(buttonPin1); bool buttonState2 = digitalRead(buttonPin2);
unsigned int currentMillis = millis(); // Aktuális idő (unsigned int)
// Ellenőrizzük gomb 1 állapotát (növelés) if (buttonState1 == LOW && lastButtonState1 == HIGH && (currentMillis - lastDebounceTime1) > debounceDelay) { emberekSzama++; if (emberekSzama > 3) emberekSzama = 3; // Ne lépje túl a 3-at lastDebounceTime1 = currentMillis; // Frissítjük az utolsó nyomás idejét }
// Ellenőrizzük gomb 2 állapotát (csökkentés) if (buttonState2 == LOW && lastButtonState2 == HIGH && (currentMillis - lastDebounceTime2) > debounceDelay) { emberekSzama--; if (emberekSzama < 0) emberekSzama = 0; // Ne lépje túl a 0-t lastDebounceTime2 = currentMillis; // Frissítjük az utolsó nyomás idejét }
// Frissítjük az előző gomb állapotokat lastButtonState1 = buttonState1; lastButtonState2 = buttonState2;
// Változó értékének vizsgálata és a LED vezérlése gombok();}



