Zpožděné sepnutí relé 2x spínač s millis
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.
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.
Re: Zpožděné sepnutí relé 2x spínač s millis
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 ?
Re: Zpožděné sepnutí relé 2x spínač s millis
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í:
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í.
Tady simulátor:
https://www.tinkercad.com/things/aYl9Rt ... neP1ow3P_8
Tady zapojení:
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í.
Re: Zpožděné sepnutí relé 2x spínač s millis
Pokud je tma HIGH a zavřená branka je taky HIGH, tak se musíš ptát jestli :
ne ? Pokud chceš akci při tmě a otevřené brance ...
Kód: Vybrat vše
if ((digitalRead(FOTOBUNKA) == HIGH) && (digitalRead(KONCAK) == LOW)) {
//akce pri sepnuti obou
}
Re: Zpožděné sepnutí relé 2x spínač s millis
Já ti rozumím, takto by to mělo být správně:
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.
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);
}
}
Re: Zpožděné sepnutí relé 2x spínač s millis
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.
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.
Re: Zpožděné sepnutí relé 2x spínač s millis
V podstatě
Pak to půjde třeba doplnit i o tohle
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
Kód: Vybrat vše
Má běžet akce a zároveň už uběhlo 60s ?
Ano - Někde se stala chyba, vyhlaš poplach
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů