Zpožděné sepnutí relé 2x spínač s millis

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Uživatelský avatar
kiRRow
Příspěvky: 1164
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od kiRRow » 26 srp 2021, 16:14

Mno počkej a ten koncák je na dorazu otevřené branky, nebo zavřené branky ? Ten program je naprosto triviální a pokud je zapojení správně, arduino nemá něco odprásknuté, tak musí fungovat. Co ti chodí do seriového monitoru při jakých stavech ?

johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od johnyhol » 27 srp 2021, 19:21

Všechno jsem znovu zapojil a překontroloval, navíc jsem to hodil pro jistotu ještě do simulátoru, ale bez úspěchu. Pořád to funguje pouze s jednou podmínkou (reakce na jedno tlačítko), jakmile program upravím (tak jako je v simulátoru) a dám složenou podmínku (reakce na dvě tlačítka) tak to přestane fungovat správně.

Tady simulátor:
https://www.tinkercad.com/things/aYl9Rt ... neP1ow3P_8

Tady zapojení:
Obrázek

Program by mi takto vyhovoval, kdyby to fungovalo jako s delay. (sepnutí relé pouze po rozepnutí tlačítka koncáku a současného sepnutí tlačítka fotobuňky) Nyní se to chová tak, že i jen při rozepnutí/sepnutí jednoho z tlačítek se rozsvítí LEDka v simulátoru.

Jinak by to mělo fungovat tak, že když se setmí (fotobuňka bude HIGH) a budou náhodou otevřená vrata (koncák bude LOW) tak by měl program nějakou dobu počkat (např. 5s) a potom dát impuls relé pohonu vrat.

V reálu má fotobuňka HIGH při tmě a koncák HIGH při sepnutí.
Přílohy
Test více podmínek.png

Uživatelský avatar
kiRRow
Příspěvky: 1164
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od kiRRow » 27 srp 2021, 23:29

Pokud je tma HIGH a zavřená branka je taky HIGH, tak se musíš ptát jestli :

Kód: Vybrat vše

if ((digitalRead(FOTOBUNKA) == HIGH) && (digitalRead(KONCAK) == LOW)) {
//akce pri sepnuti obou
}
ne ? Pokud chceš akci při tmě a otevřené brance ...

johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od johnyhol » 28 srp 2021, 09:59

Já ti rozumím, takto by to mělo být správně:

Kód: Vybrat vše

#define KONCAK 2 // koncak vrat - modry
#define FOTOBUNKA 3 // fotobunka - zluty
#define CHODEC 4 // chodec-zelena LED

 
void setup() {
 pinMode(FOTOBUNKA, INPUT);
 pinMode(KONCAK, INPUT);
 pinMode(CHODEC, OUTPUT);
 digitalWrite(CHODEC, LOW);
}
 
void loop() {

 if ((digitalRead(FOTOBUNKA) == HIGH) && (digitalRead(KONCAK) == LOW)){
       delay(5000);
       digitalWrite(CHODEC, HIGH);
       delay(1000);
       digitalWrite(CHODEC, LOW);    
 }else{
     digitalWrite(CHODEC, LOW);
   }
 }
ale problém je, že to funguje jenom v tomto kódu s delay. Když nahraju kód s millis tak se z nějakého důvodu přehodí logika obráceně, proto tam mám fotobuňka LOW a koncák HIGH. Ale to by mi ani nevadilo, horší je, že se to chová celkově nějak divně. Prostě nefunguje složená podmínka, ale reaguje to na kteroukoli z nich.

Uživatelský avatar
kiRRow
Příspěvky: 1164
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od kiRRow » 28 srp 2021, 10:30

To protože ta složená podmínka správně nemá spouštět onu akci, ale má říct programu, že akce má začít a zároveň si poznamenat, že akce ještě neskončila (edit : vlastně by mělo stačit vědět, že akce běží, pokud běží, tak ještě neskončila), aby ji při dalším průbehu loopem nespustil znovu (protože furt bude tma a ještě to nebude zavřené - přesně tady je zakopaný pes) a ještě si musíš poznamenat čas, kdy došlo ke zjištění, že má začít akce.

Samotná akce se spustí na základě podmínky že je třeba konat akci a zároveň už je k tomu čas.
O ukončení akce se postará podmínka, že je potřeba konat akci, ale branka už je zavřená.

edit2 :
Samotná akce pak při spuštění zkontroluje jestli už uběhl čas akce +1s ... pokud ne, sepne relé, pokud ano rozepne relé

Pokud to pak někdo v noci otevře, tak mu to ten program zase za 5s zavře.

Uživatelský avatar
kiRRow
Příspěvky: 1164
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Zpožděné sepnutí relé 2x spínač s millis

Příspěvek od kiRRow » 28 srp 2021, 10:55

V podstatě

Kód: Vybrat vše

Je tma a zároveň otevřeno ?
	Ano -
		Běží už akce ?
			Ne -
				Poznamenej, že akce má běžet
				Zapamatuj si čas
			Ano -
				Nedělej nic

Má běžet akce a zároveň už uběhlo 5s ?
	Ano -
		Uběhlo už 6s ?
			Ne -
				Sepni relé
			Ano -
				Rozepni relé
	Ne -
		Nedělej nic

Má běžet akce a branka už je dovřená ?
	Ano -
		Poznamenej, že akce už nemá běžet
	Ne -
		Nedělej nic - nebo si někde třeba na diodě zobraz že akce je spuštěná, ale ještě se to nezavřelo
Pak to půjde třeba doplnit i o tohle

Kód: Vybrat vše

Má běžet akce a zároveň už uběhlo 60s ?
	Ano - Někde se stala chyba, vyhlaš poplach

Odpovědět

Kdo je online

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