Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- #define upButtonPin A0
- #define downButtonPin A1
- #define jel12VPin A3
- const int numRelays = 5; // Relék száma
- int relayPins[numRelays] = {5, 6, 7, 8, 9}; // Relék csatlakoztatási pinjei
- bool buttonUpState = LOW; // A nyomógomb aktuális állapota
- bool buttonDownState = LOW; // A nyomógomb aktuális állapota
- bool jel12VState = LOW; // A 12V-os jel aktuális állapota
- bool lastButtonUpState = LOW; // Az előző nyomógomb állapot
- bool lastButtonDownState = LOW; // Az előző nyomógomb állapot
- bool lastJel12VState = LOW; // A 12V-os jel előző állapota
- int level=1; // A változtatni kívánt fokozat kezdeti értéke 1
- int lastLevel=1; // A változtatni kívánt fokozat előző értéke 1
- unsigned long lastDebounceTimeUp = 0; // A fel nyomógomb utolsó prellmentes időpontja
- unsigned long lastDebounceTimeDown = 0; // A le nyomógomb utolsó prellmentes időpontja
- unsigned long debounceDelay = 50; // A prellmentes idő beállítása
- void setup() {
- //Serial.begin(115200); // Soros kommunikáció inicializálása
- //Serial.println("Start ..."); // Lássuk, hogy rendben elindult a program
- for (int i = 0; i < numRelays; i++) {
- pinMode(relayPins[i], OUTPUT);
- digitalWrite(relayPins[i],LOW);
- }
- pinMode(upButtonPin, INPUT_PULLUP);
- pinMode(downButtonPin, INPUT_PULLUP);
- pinMode(jel12VPin, INPUT_PULLUP);
- pinMode(13,OUTPUT);
- }
- void loop() {
- int readingUp = !digitalRead(upButtonPin); // Olvassuk be a fel nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
- int readingDown = !digitalRead(downButtonPin); // Olvassuk be a le nyomógomb állapotát negálva, ha a GND-ra van csatlakoztatva
- // Amennyiben a +táphoz csatlakoztattuk, akkor így módosul a nyomógombok állapotának a beolvasása:
- //int readingUp = digitalRead(upButtonPin); // Olvassuk be a fel nyomógomb állapotát
- //int readingDown = digitalRead(downButtonPin); // Olvassuk be a le nyomógomb állapotát
- int readingJel12V = !digitalRead(jel12VPin); // Olvassuk be a 12V jel állapotát
- digitalWrite(13,readingJel12V);
- if (lastJel12VState != readingJel12V){ // Ha a 12V-os jel állapota változott
- if (readingJel12V==LOW){ // Nincs 12V-os jel, kikapcsol az összes relé
- for (int i = 0; i < numRelays; i++) {
- digitalWrite(relayPins[i],LOW);
- }
- } else { // Megvan a 12V-os jel
- level=1;
- lastLevel=1;
- digitalWrite(relayPins[level-1],HIGH); // Az 1. relé bekapcsolása
- }
- }
- // Ha a fel gomb állapota változott
- if (readingUp != lastButtonUpState) {
- // Frissítjük a prellmentes időtartam kezdeti idejét
- lastDebounceTimeUp = millis();
- }
- // Ha a le gomb állapota változott és megvan a 12V-os jel
- if (readingDown != lastButtonDownState) {
- // Frissítjük a prellmentes időtartam kezdeti idejét
- lastDebounceTimeDown = millis();
- }
- // Ellenőrizzük, hogy a fel gomb állapota stabil-e a prellmentes idő után
- if ((millis() - lastDebounceTimeUp) > debounceDelay) {
- // Ha igen, akkor frissítjük a gomb állapotát
- if (readingUp != buttonUpState) {
- buttonUpState = readingUp;
- // Ha a gombot lenyomtad
- if (buttonUpState == HIGH and readingJel12V==HIGH) {
- level++; // Fokozat számának növelése
- if (level>numRelays) { // Ha a fokozat száma nagyobb, mint a maximum, akkor a fokozat száma a maximum lesz
- level=numRelays;
- } else { // Történt változás a fokozat számában
- digitalWrite(relayPins[lastLevel-1],LOW); // Az előző állapot kikapcsolása
- digitalWrite(relayPins[level-1],HIGH); // Az új állapot bekapcsolása
- lastLevel=level; // A váltó aktuális állapotát eltároljuk az előző állapotban
- }
- }
- // Ha a gombot elengedted
- else {
- //Serial.println("A fel nyomógomb elengedve");
- }
- }
- }
- // Ellenőrizzük, hogy a le gomb állapota stabil-e a prellmentes idő után
- if ((millis() - lastDebounceTimeDown) > debounceDelay) {
- // Ha igen, akkor frissítjük a gomb állapotát
- if (readingDown != buttonDownState) {
- buttonDownState = readingDown;
- // Ha a gombot lenyomtad
- if (buttonDownState == HIGH and readingJel12V==HIGH) {
- level--; // Fokozat számának növelése
- if (level<1) { // Ha a fokozat száma kisebb, mint a minimum, akkor a fokozat száma a minimum lesz
- level=1;
- } else { // Történt változás a fokozat számában
- digitalWrite(relayPins[lastLevel-1],LOW); // Az előző állapot kikapcsolása
- digitalWrite(relayPins[level-1],HIGH); // Az új állapot bekapcsolása
- lastLevel=level; // A váltó aktuális állapotát eltároljuk az előző állapotban
- }
- }
- // Ha a gombot elengedted
- else {
- //Serial.println("A le nyomógomb elengedve");
- }
- }
- }
- // A fel és a le nyomógomb aktuális állapotát eltároljuk az előző állapotban
- lastButtonUpState = readingUp;
- lastButtonDownState = readingDown;
- lastJel12VState = readingJel12V;
- }
- // END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement