ovladani relay pomoci jednoho tlacitka

Odpovědět
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

ovladani relay pomoci jednoho tlacitka

Příspěvek od Kony » 21 bře 2021, 17:56

Ahoj, lze chovani relay modulu ovladat pomoci jednoho tlacitka ????

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

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: ovladani relay pomoci jednoho tlacitka

Příspěvek od Axamith » 21 bře 2021, 18:50

Tady se mrkni na princip, i když to ovládá LED.
https://bastlirna.hwkitchen.cz/arduino- ... -tlacitko/

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: ovladani relay pomoci jednoho tlacitka

Příspěvek od KamilV » 21 bře 2021, 19:31

+ vyřešit zákmity, které by u relé už vadily...

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ovladani relay pomoci jednoho tlacitka

Příspěvek od jankop » 21 bře 2021, 19:54

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

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: ovladani relay pomoci jednoho tlacitka

Příspěvek od AstroMiK » 21 bře 2021, 19:58

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ů.

Hanz
Příspěvky: 262
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: ovladani relay pomoci jednoho tlacitka

Příspěvek od Hanz » 22 bře 2021, 22:14

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:

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů