Close

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

#8263
posjirka
Úč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
	} 
}