Stránka 1 z 1

ovladani relay pomoci jednoho tlacitka

Napsal: 21 bře 2021, 17:56
od Kony
Ahoj, lze chovani relay modulu ovladat pomoci jednoho tlacitka ????

Zmacknu jednou relay se zapne, zmacknu po druhy relay se vypne atd

Re: ovladani relay pomoci jednoho tlacitka

Napsal: 21 bře 2021, 18:50
od Axamith
Tady se mrkni na princip, i když to ovládá LED.
https://bastlirna.hwkitchen.cz/arduino- ... -tlacitko/

Re: ovladani relay pomoci jednoho tlacitka

Napsal: 21 bře 2021, 19:31
od KamilV
+ vyřešit zákmity, které by u relé už vadily...

Re: ovladani relay pomoci jednoho tlacitka

Napsal: 21 bře 2021, 19:54
od jankop
Axamith píše:
21 bře 2021, 18:50
Tady se mrkni na princip, i když to ovládá LED.
https://bastlirna.hwkitchen.cz/arduino- ... -tlacitko/
Tak schválně, jestli přijdeš na to, proč je ten program naprosto nesmyslnej! :D

Re: ovladani relay pomoci jednoho tlacitka

Napsal: 21 bře 2021, 19:58
od AstroMiK

Kód: Vybrat vše

// Ovladani rele (LED) tlacitkem ve stylu: "prvnim stiskem zapni, duhym stiskem vypni"


boolean stav = false;                               // pomocna promenna, ktera si pamatuje aktualni stav rele (nebo LED)

void setup(void)
  {
    pinMode(5,INPUT_PULLUP);                        // tlacitko spina proti GND
    pinMode(6,OUTPUT);                              // vystup pro rele (LED)
  }



void loop(void)
  {

    if (digitalRead(5) == LOW and stav == false)    // tlacitko bylo stisknuto pri rozepnutem rele (zhasnute LED)
      {
        delay(20);                                  // odruseni zakmitu pri stisku tlacitka
        digitalWrite(6,HIGH);                       // sepnuti rele (rozsviceni LED)
        stav = true;                                // znacka, ze je aktualne sepnuto (rozsviceno)
        while (digitalRead(5) == LOW)  ;            // cekani na uvolneni tlacitka (zadny prikaz uvnitr while smycky - to je ten samotny strednik)
        delay(20);                                  // odruseni zakmitu pri rozpinani tlacitka
      }


    if (digitalRead(5) == LOW and stav == true)     // tlacitko bylo stisknuto pri sepnutem rele (rozsvicene LED)
      {
        delay(20);                                  // odruseni zakmitu pri stisku tlacitka
        digitalWrite(6,LOW);                        // rozepnuti rele (zhasnuti LED)
        stav = false;                               // znacka, ze je aktualne rozepnuto (zhasnuto)
        while (digitalRead(5) == LOW)  ;            // cekani na uvolneni tlacitka (zadny prikaz uvnitr while smycky - to je ten samotny strednik)
        delay(20);                                  // odruseni zakmitu pri rozpinani tlacitka
      }

  }

... Nevýhoda tohodle řešení je v tom, že při stisknutém tlačítku program stojí (cykluje na jedné řádce ve while smyčce).
Nevím, jestli to v tomhle případě nějak vadí.
Program se ale dá napsat "tisícem" různých způsobů.

Re: ovladani relay pomoci jednoho tlacitka

Napsal: 22 bře 2021, 22:14
od Hanz
a nebo takto :
tady jsem si poprvé vyzkoušel knihovnu Bounce2
kód původně pro Led ;)

Kód: Vybrat vše

// ZAP VYP tlacitkem a Bounce2
// podle https://www.arduinoslovakia.eu/blog/2018/2/attiny85---tlacidla?lang=cs
// TEST 22.3.2021  22:00 hod. PLNĚ FUNKČNÍ !!!

#include <Bounce2.h>

const int rele = 4;
const int button = 6;
int rele_state = LOW;

Bounce debouncer;

void setup() {
  pinMode(rele, OUTPUT);
  pinMode(button, INPUT_PULLUP);
  debouncer.attach(button);
  debouncer.interval(5);
}

void loop() {
  debouncer.update();
  if (debouncer.fell())
    rele_state = !rele_state;

  digitalWrite(rele, rele_state);
}
no a tady s debounce bez použití knihovny

Kód: Vybrat vše

// Rele tlačítkem Zap Vyp s Debounce
// podle https://www.arduinoslovakia.eu/blog/2018/2/attiny85---tlacidla?lang=cs
// TEST 22.3.2021 22:25 hod. PLNĚ FUNKČNÍ !!!
// původně pro Led

const int rele = 4;
const int button = 6;
int rele_state = LOW;

// Button states and debounce
int buttonState = 0;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;

void setup() {
  pinMode(rele, OUTPUT);
  pinMode(button, INPUT_PULLUP);
}

void loop() {
  int reading = digitalRead(button);
  if (reading != lastButtonState)
    lastDebounceTime = millis();

  if ((millis() - lastDebounceTime) > 50) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW) {
        rele_state = !rele_state;
      }
    }
  }

  lastButtonState = reading;

  digitalWrite(rele, rele_state);
}
...chvíli jsem hledal,pak odzkoušel a děkuji stránkám www.arduinoslovakia.eu za osvěžení paměti :lol: