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
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
Tak schválně, jestli přijdeš na to, proč je ten program naprosto nesmyslnej!
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