Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Források
- //https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce
- //https://www.hobbielektronika.hu/cikkek/will-i_the_end_robotika_es_avr_kezdoknek.html?pg=5
- //A ledek kivezetéseinek definiálása
- #define LED1 10
- #define LED2 2
- #define LED3 3
- #define LED4 4
- #define LED5 5
- //A nyomógombok kivezetéseinek definiálása
- #define BUTTON_PLUS 6
- #define BUTTON_MINUS 7
- //A relé kivezetésének definiálása
- #define RELAY 8
- //A MOSFET kivezetésének definiálása
- //Mindenképpen PWM képes lábat kell kiválasztani ide!
- #define MOSFET 9
- //A nyomógombokról beolvasott értékek tárolására szolgáló változók
- bool minusRead = false;
- bool plusRead = false;
- //A nyomógombok aktuális állapotának tárolására szolgáló változók
- bool minusState = false;
- bool plusState = false;
- //A nyomógombok legutóbbi állapotának tárolására szolgáló változók
- bool lastMinusState = false;
- bool lastPlusState = false;
- //Pergésmentesítéshez használt változók
- unsigned long lastDebounceTime = 0; //
- unsigned long debounceDelay = 50; //
- //Az aktuális fűtési szintet tároló változó
- byte actualLevel = 0;
- //Az adott fűtési szinthez tartozó kitöltési tényezőket tároló tömbs
- byte powerLevels[6] = {0, 51, 102, 153, 204, 255};
- void setup()
- {
- //A LEDek defeiniálása kimenetként
- pinMode(LED1, OUTPUT);
- pinMode(LED2, OUTPUT);
- pinMode(LED3, OUTPUT);
- pinMode(LED4, OUTPUT);
- pinMode(LED5, OUTPUT);
- //A nyomógombok definiálása bemenetként
- pinMode(BUTTON_PLUS, INPUT);
- pinMode(BUTTON_MINUS, INPUT);
- //A relé defeiniálása kimenetként
- pinMode(RELAY, OUTPUT);
- //A MOSFET defeiniálása kimenetként
- pinMode(MOSFET, OUTPUT);
- //A LED-ek alaphelyzetbe állítása
- digitalWrite(LED1, LOW);
- digitalWrite(LED2, LOW);
- digitalWrite(LED3, LOW);
- digitalWrite(LED4, LOW);
- digitalWrite(LED5, LOW);
- //A relé alaphelyzetbe állítása
- digitalWrite(RELAY, LOW);
- //A MOSFET alaphelyzetbe állítása
- analogWrite(MOSFET, 0);
- }
- void loop()
- {
- //a gombok állapotainak beolvasása
- plusRead = digitalRead(BUTTON_PLUS);
- minusRead = digitalRead(BUTTON_MINUS);
- //Pergésmentesítés
- if(plusRead != lastPlusState || minusRead != lastMinusState) //ha valamelyik gomb állapota megváltozott (zaj vagy lenyomás miatt)
- {
- lastDebounceTime = millis(); //akkor az utolsó prellezés ideje az aktuális futási idővel lesz egyenlő
- }
- if ((millis() - lastDebounceTime) > debounceDelay) // ha az aktuális futási idő és a legutóbbi prellezés közötti idő nagyobb, mint a pergésmentesítéshez használt késleltetési idő
- {
- if(plusRead != plusState) //ha az érték növelő gomb állapota megváltozott
- {
- plusState = plusRead; //akkor a gomb állapota, az olvasott értékkel lesz egyenlő
- if(plusState == true && actualLevel < 5) //ha a gomb megnyomva lett, nem elengedve és még növelehető a fűtési szint
- {
- actualLevel++; //növeljük a fűtési szintet
- }
- }
- if(minusRead != minusState) //ha az érték csökkentő gomb állapota megváltozott
- {
- minusState = minusRead; //akkor a gomb állapota, az olvasott értékkel lesz egyenlő
- if(minusState == true && 0 < actualLevel) //ha a gomb megnyomva lett, nem elengedve és még csökkenthető a fűtési szint
- {
- actualLevel--; //növeljük a fűtési szintet
- }
- }
- }
- //Lényegi kód
- LEDWrite(actualLevel); //LED-ek állapotának írása
- RelayWrite(actualLevel); //Relé állapotának írása
- MOSFETWrite(actualLevel); //MOSFET állapotának írása
- //A legutóbi állapot az olvasott értékekel lesz egyenlő
- lastMinusState = minusRead;
- lastPlusState = plusRead;
- }
- //LED-ek állapotának írása a fűtési szint alapján
- void LEDWrite(byte powerLevel)
- {
- //az adott fűtési szintnek megflelelő darabszámú LED világít, a többi pedig nem
- switch(powerLevel)
- {
- case 0:
- digitalWrite(LED1, LOW);
- digitalWrite(LED2, LOW);
- digitalWrite(LED3, LOW);
- digitalWrite(LED4, LOW);
- digitalWrite(LED5, LOW);
- break;
- case 1:
- digitalWrite(LED1, HIGH);
- digitalWrite(LED2, LOW);
- digitalWrite(LED3, LOW);
- digitalWrite(LED4, LOW);
- digitalWrite(LED5, LOW);
- break;
- case 2:
- digitalWrite(LED1, HIGH);
- digitalWrite(LED2, HIGH);
- digitalWrite(LED3, LOW);
- digitalWrite(LED4, LOW);
- digitalWrite(LED5, LOW);
- break;
- case 3:
- digitalWrite(LED1, HIGH);
- digitalWrite(LED2, HIGH);
- digitalWrite(LED3, HIGH);
- digitalWrite(LED4, LOW);
- digitalWrite(LED5, LOW);
- break;
- case 4:
- digitalWrite(LED1, HIGH);
- digitalWrite(LED2, HIGH);
- digitalWrite(LED3, HIGH);
- digitalWrite(LED4, HIGH);
- digitalWrite(LED5, LOW);
- break;
- case 5:
- digitalWrite(LED1, HIGH);
- digitalWrite(LED2, HIGH);
- digitalWrite(LED3, HIGH);
- digitalWrite(LED4, HIGH);
- digitalWrite(LED5, HIGH);
- break;
- }
- }
- //Relé állapotának írása a fűtési szint alapján
- void RelayWrite(byte powerLevel)
- {
- if(0 < powerLevel && powerLevel <= 5) //ha a fűtési szint 0 és 5 között van
- {
- digitalWrite(RELAY, HIGH); //akkor a relé behúz
- }
- else
- {
- digitalWrite(RELAY, LOW); //egyébként pedig nem
- }
- }
- //MOSFET állapotának írása a fűtési szint alapján
- void MOSFETWrite(byte powerLevel)
- {
- //kiválasztjuk a fűtési szinteknek megfelelő PWM értékeket tároló tömbből az adott szinthez tartozó elemet, majd a PWM kitöltési tényezőjét arra az értékre állítjuk be
- analogWrite(MOSFET, powerLevels[powerLevel]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement