Advertisement
Szerelo

Gombkezelés

May 11th, 2024
1,133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.26 KB | None | 0 0
  1. const int button1Pin = 2; // Az 1. nyomógombot a 2-es pinre csatlakoztattuk
  2. const int button2Pin = 3; // A 2. nyomógombot a 3-es pinre csatlakoztattuk
  3. bool button1State = LOW;   // A nyomógomb aktuális állapota
  4. bool button2State = LOW;   // A nyomógomb aktuális állapota
  5. bool lastButton1State = LOW; // Az előző nyomógomb állapot
  6. bool lastButton2State = LOW; // Az előző nyomógomb állapot
  7. int iValue=0;   // A változtatni kívánt változó kezdeti értéke 0
  8. unsigned long lastDebounceTime1 = 0;  // Az 1. nyomógomb utolsó prellmentes időpontja
  9. unsigned long lastDebounceTime2 = 0;  // A 2. nyomógomb utolsó prellmentes időpontja
  10. unsigned long debounceDelay = 50;    // A prellmentes idő beállítása
  11.  
  12. void setup() {
  13.   // Beállítjuk a bemenetként használt pinek irányát. Ha a nyomógomb a GND-hez van csatlakoztatva, akkor szükséges egy felhúzó ellenállás.
  14.   // A felhúzó ellenállás lehet a belső ellenállás is, ílyenkor nincs szükség plusz alkatrészre.
  15.   pinMode(button1Pin, INPUT_PULLUP); // Az 1. nyomógomb pinjét bemenetként állítjuk be és bekapcsoljuk a felhúzó ellenállást
  16.   pinMode(button2Pin, INPUT_PULLUP); // A 2. nyomógomb pinjét bemenetként állítjuk be és bekapcsoljuk a felhúzó ellenállást
  17.   // Amennyiben a nyomógomb a + tápfeszültségre van kötve, akkor egy lehúzó ellenállásra van szükség. Ilyenkor nincs szükség a belső felhúzó ellenállásra.
  18.   // Ebben az esetben így módosul a pinek beállítása:
  19.   //pinMode(button1Pin, INPUT); // Az 1. nyomógomb pinjét bemenetként állítjuk be
  20.   //pinMode(button2Pin, INPUT); // A 2. nyomógomb pinjét bemenetként állítjuk be
  21.  
  22.   Serial.begin(115200);         // Soros kommunikáció inicializálása
  23.   Serial.println("Start ...");  // Lássuk, hogy rendben elindult a program
  24. }
  25.  
  26. void loop() {
  27.   bool reading1 = !digitalRead(button1Pin); // Olvassuk be az 1. nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
  28.   bool reading2 = !digitalRead(button2Pin); // Olvassuk be a 2. nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
  29.   // Amennyiben a +táphoz csatlakoztattuk, akkor így módosul a nyomógombok állapotának a beolvasása:
  30.   //bool reading1 = digitalRead(button1Pin); // Olvassuk be az 1. nyomógomb állapotát
  31.   //bool reading2 = digitalRead(button2Pin); // Olvassuk be a 2. nyomógomb állapotát
  32.  
  33.   // Ha a gomb állapota változott
  34.   if (reading1 != lastButton1State) {
  35.     // Frissítjük a prellmentes időtartam kezdeti idejét
  36.     lastDebounceTime1 = millis();
  37.   }
  38.  
  39.   // Ellenőrizzük, hogy a gomb állapota stabil-e a prellmentes idő után
  40.   if ((millis() - lastDebounceTime1) > debounceDelay) {
  41.     // Ha igen, akkor frissítjük a gomb állapotát
  42.     if (reading1 != button1State) {
  43.       button1State = reading1;
  44.  
  45.       // Ha a gombot lenyomtad
  46.       if (button1State == HIGH) {
  47.         Serial.println("1. nyomógomb lenyomva");
  48.         if(iValue<5) iValue++;  // Az 1. gomb megnyomására növeljuk az iValue változó értéket, ha ez az érték kissebb, mint 5
  49.         Serial.print("Az iValue értéke: ");
  50.         Serial.println(iValue);
  51.       }
  52.       // Ha a gombot elengedted
  53.       else {
  54.         Serial.println("1. nyomógomb elengedve");
  55.       }
  56.     }
  57.   }
  58.   if (reading2 != lastButton2State) {
  59.     // Frissítjük a prellmentes időtartam kezdeti idejét
  60.     lastDebounceTime2 = millis();
  61.   }
  62.  
  63.   // Ellenőrizzük, hogy a gomb állapota stabil-e a prellmentes idő után
  64.   if ((millis() - lastDebounceTime2) > debounceDelay) {
  65.     // Ha igen, akkor frissítjük a gomb állapotát
  66.     if (reading2 != button2State) {
  67.       button2State = reading2;
  68.  
  69.       // Ha a gombot lenyomtad
  70.       if (button2State == HIGH) {
  71.         Serial.println("2. nyomógomb lenyomva");
  72.         if (iValue>0) iValue--;   // A 2. gomb megnyomására csökkentjük az iValue változó értéket, ha ez az érték nagyobb, mint nulla
  73.         Serial.print("Az iValue értéke: ");
  74.         Serial.println(iValue);
  75.       }
  76.       // Ha a gombot elengedted
  77.       else {
  78.         Serial.println("2. nyomógomb elengedve");
  79.       }
  80.     }
  81.   }
  82.  
  83.   // A nyomógomb aktuális állapotát eltároljuk az előző állapotban
  84.   lastButton1State = reading1;
  85.   lastButton2State = reading2;
  86. }
  87.  
  88.  
  89.  
  90. // END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement