Odpověď na: Dvě časově ovládaná relé ovládaná dvěma vzájemně se vybavujícími tlačítky
Úvodní stránka › Fórum › Hardware › Arduino › Dvě časově ovládaná relé ovládaná dvěma vzájemně se vybavujícími tlačítky › Odpověď na: Dvě časově ovládaná relé ovládaná dvěma vzájemně se vybavujícími tlačítky
5.9.2016 v 10:48
#8263
Účastník
zkus jako zaklad toto:
// program pro ovladani 2 rele pomoci 2 tlacitek
// v01 by JP 9/2016
// program ovlada 2 rele s tím, ze:
// - stiskem tlacitka 1 se na nastavenou dobu sepne rele 1
// - stiskem tlacitka 2 se na nastavenou dobu sepne rele 2
// - kdyz behem sepnuti rele 1 stisknu tlacitko 2 tak se rele 1 vypne a sepne se rele 2
// - kdyz behem sepnuti rele 2 stisknu tlacitko 1 tak se rele 2 vypne a sepne se rele 1
int RELE_1 = 10; // pin pro rele 1
int RELE_2 = 11; // pin pro rele 2
int TLACITKO_1 = 4; // pin pro tlacitko 1
int TLACITKO_2 = 3; // pin pro tlacitko 2
int ZAPNI_RELE_1 = 0; // 0 - vypnuto
int ZAPNI_RELE_2 = 0; // 0 - vypnuto
unsigned long CAS_VYPNUTI_RELE_1 = 0; // kdy ma rele 1 vypnout (nastavuje se v době sepnuti tlacitka)
unsigned long CAS_VYPNUTI_RELE_2 = 0; // kdy ma rele 2 vypnout (nastavuje se v době sepnuti tlacitka)
unsigned long DELKA_SEPNUTI_RELE = 3000; // jak dlouho maji byt rele sepnute (v milisekundach )
void setup()
{
pinMode(RELE_1, OUTPUT); // nastaveni pinu jako vystup
pinMode(RELE_2, OUTPUT); // nastaveni pinu jako vystup
pinMode(TLACITKO_1, INPUT_PULLUP); // nastaveni pinu jako vstup s interním pullup odporem
pinMode(TLACITKO_2, INPUT_PULLUP); // nastaveni pinu jako vstup s interním pullup odporem
}
void loop()
{
// ovladani tlacitka 1
if (digitalRead(TLACITKO_1) == 0 ){ // když je stisknuto tlačtíko 1
CAS_VYPNUTI_RELE_1 = millis() + DELKA_SEPNUTI_RELE;
ZAPNI_RELE_1 = 1; // povoleni k sepnuti rele 1
ZAPNI_RELE_2 = 0; // preventivne zakaz zapnuti rele 2
}
if (ZAPNI_RELE_1 == 1) { // rele 1 ma byt sepnute
if (millis() > CAS_VYPNUTI_RELE_1) { // uz pretekl cas zapnuti rele 1
ZAPNI_RELE_1 = 0; // zrus pozadavek na zapnuti rele 1
digitalWrite(RELE_1, LOW); // vypni rele 1
}
else {
digitalWrite(RELE_1, HIGH); // zapni rele 1
}
}
else {
digitalWrite(RELE_1, LOW); // vypni rele 1
}
// ovladani tlacitka 2
if (digitalRead(TLACITKO_2) == 0 ){ // když je stisknuto tlačtíko 2
CAS_VYPNUTI_RELE_2 = millis() + DELKA_SEPNUTI_RELE;
ZAPNI_RELE_2 = 1; // povoleni k sepnuti rele 2
ZAPNI_RELE_1 = 0; // preventivne zakaz zapnuti rele 1
}
if (ZAPNI_RELE_2 == 1) { // rele 2 ma byt sepnute
if (millis() > CAS_VYPNUTI_RELE_2) { // uz pretekl cas zapnuti rele 2
ZAPNI_RELE_2 = 0; // zrus pozadavek na zapnuti rele 2
digitalWrite(RELE_2, LOW); // vypni rele 2
}
else {
digitalWrite(RELE_2, HIGH); // zapni rele 2
}
}
else {
digitalWrite(RELE_2, LOW); // vypni rele 1
}
}