Advertisement
Szerelo

5 szekvenciális kimenet

Jun 22nd, 2024
698
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.14 KB | None | 0 0
  1. //
  2.  
  3. #define  upButtonPin A0
  4. #define  downButtonPin A1
  5. #define  jel12VPin A3
  6.  
  7. const int numRelays = 5; // Relék száma
  8. int relayPins[numRelays] = {5, 6, 7, 8, 9}; // Relék csatlakoztatási pinjei
  9. bool buttonUpState = LOW;   // A nyomógomb aktuális állapota
  10. bool buttonDownState = LOW;   // A nyomógomb aktuális állapota
  11. bool jel12VState = LOW;   // A 12V-os jel aktuális állapota
  12. bool lastButtonUpState = LOW; // Az előző nyomógomb állapot
  13. bool lastButtonDownState = LOW; // Az előző nyomógomb állapot
  14. bool lastJel12VState = LOW; // A 12V-os jel előző állapota
  15. int level=1;   // A változtatni kívánt fokozat kezdeti értéke 1
  16. int lastLevel=1;   // A változtatni kívánt fokozat előző értéke 1
  17. unsigned long lastDebounceTimeUp = 0;  // A fel nyomógomb utolsó prellmentes időpontja
  18. unsigned long lastDebounceTimeDown = 0;  // A le nyomógomb utolsó prellmentes időpontja
  19. unsigned long debounceDelay = 50;    // A prellmentes idő beállítása
  20.  
  21.  
  22. void setup() {
  23.   //Serial.begin(115200);         // Soros kommunikáció inicializálása
  24.   //Serial.println("Start ...");  // Lássuk, hogy rendben elindult a program
  25.   for (int i = 0; i < numRelays; i++) {
  26.     pinMode(relayPins[i], OUTPUT);
  27.     digitalWrite(relayPins[i],LOW);
  28.   }
  29.   pinMode(upButtonPin, INPUT_PULLUP);
  30.   pinMode(downButtonPin, INPUT_PULLUP);
  31.   pinMode(jel12VPin, INPUT_PULLUP);
  32.   pinMode(13,OUTPUT);
  33. }
  34.  
  35. void loop() {
  36.   int readingUp = !digitalRead(upButtonPin); // Olvassuk be a fel nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
  37.   int readingDown = !digitalRead(downButtonPin); // Olvassuk be a le nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
  38.   // Amennyiben a +táphoz csatlakoztattuk, akkor így módosul a nyomógombok állapotának a beolvasása:
  39.   //int readingUp = digitalRead(upButtonPin); // Olvassuk be a fel nyomógomb állapotát
  40.   //int readingDown = digitalRead(downButtonPin); // Olvassuk be a le nyomógomb állapotát
  41.   int readingJel12V = !digitalRead(jel12VPin); // Olvassuk be a 12V jel állapotát
  42.   digitalWrite(13,readingJel12V);
  43.   if (lastJel12VState != readingJel12V){    // Ha a 12V-os jel állapota változott
  44.     if (readingJel12V==LOW){    // Nincs 12V-os jel, kikapcsol az összes relé
  45.       for (int i = 0; i < numRelays; i++) {
  46.         digitalWrite(relayPins[i],LOW);
  47.       }
  48.     } else {    // Megvan a 12V-os jel
  49.       level=1;
  50.       lastLevel=1;
  51.       digitalWrite(relayPins[level-1],HIGH);     // Az 1. relé bekapcsolása
  52.     }
  53.   }
  54.   // Ha a fel gomb állapota változott
  55.   if (readingUp != lastButtonUpState) {
  56.     // Frissítjük a prellmentes időtartam kezdeti idejét
  57.     lastDebounceTimeUp = millis();
  58.   }
  59.   // Ha a le gomb állapota változott és megvan a 12V-os jel
  60.   if (readingDown != lastButtonDownState) {
  61.     // Frissítjük a prellmentes időtartam kezdeti idejét
  62.     lastDebounceTimeDown = millis();
  63.   }
  64.   // Ellenőrizzük, hogy a fel gomb állapota stabil-e a prellmentes idő után
  65.   if ((millis() - lastDebounceTimeUp) > debounceDelay) {
  66.     // Ha igen, akkor frissítjük a gomb állapotát
  67.     if (readingUp != buttonUpState) {
  68.       buttonUpState = readingUp;
  69.       // Ha a gombot lenyomtad
  70.       if (buttonUpState == HIGH and readingJel12V==HIGH) {
  71.         level++;    // Fokozat számának növelése
  72.         if (level>numRelays) {    // Ha a fokozat száma nagyobb, mint a maximum, akkor a fokozat száma a maximum lesz
  73.           level=numRelays;
  74.         } else {    // Történt változás a fokozat számában
  75.           digitalWrite(relayPins[lastLevel-1],LOW);  // Az előző állapot kikapcsolása
  76.           digitalWrite(relayPins[level-1],HIGH);     // Az új állapot bekapcsolása
  77.           lastLevel=level;    // A váltó aktuális állapotát eltároljuk az előző állapotban
  78.         }
  79.       }
  80.       // Ha a gombot elengedted
  81.       else {
  82.         //Serial.println("A fel nyomógomb elengedve");
  83.       }
  84.     }
  85.   }
  86.  
  87.   // Ellenőrizzük, hogy a le gomb állapota stabil-e a prellmentes idő után
  88.   if ((millis() - lastDebounceTimeDown) > debounceDelay) {
  89.     // Ha igen, akkor frissítjük a gomb állapotát
  90.     if (readingDown != buttonDownState) {
  91.       buttonDownState = readingDown;
  92.       // Ha a gombot lenyomtad
  93.       if (buttonDownState == HIGH and readingJel12V==HIGH) {
  94.         level--;    // Fokozat számának növelése
  95.         if (level<1) {    // Ha a fokozat száma kisebb, mint a minimum, akkor a fokozat száma a minimum lesz
  96.           level=1;
  97.         } else {    // Történt változás a fokozat számában
  98.           digitalWrite(relayPins[lastLevel-1],LOW);  // Az előző állapot kikapcsolása
  99.           digitalWrite(relayPins[level-1],HIGH);     // Az új állapot bekapcsolása
  100.           lastLevel=level;    // A váltó aktuális állapotát eltároljuk az előző állapotban
  101.         }
  102.       }
  103.       // Ha a gombot elengedted
  104.       else {
  105.         //Serial.println("A le nyomógomb elengedve");
  106.       }
  107.     }
  108.   }
  109.   // A fel és a le nyomógomb aktuális állapotát eltároljuk az előző állapotban
  110.   lastButtonUpState = readingUp;
  111.   lastButtonDownState = readingDown;
  112.   lastJel12VState = readingJel12V;
  113. }
  114.  
  115. // END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement