Myšlenka je taková, že veškeré řízení převezme právě SonOff (ovládání, čas a vzdálené ovládání).
Požadované funkce:
1) automatické zavření vrat po určité době (cca. 20s) tj. po průjezdu vozidel (pokud není nic v prostoru fotobuněk mezi vraty) - funkční při všech případech otevření (tlačítko vrátnice, PC, fotobuňky uvnitř firmy)
2) automatické otevření vrat při výjezdu z firmy (při průjezdu fotobuňkami před vraty uvnitř firmy) a automatické zavření viz. bod 1)
3) funkčnost automatického otevírání pouze během pracovní doby (např. 6:00-16:00h a jen v pracovní dny) - spínací hodiny
4) vzdálené ovládání vrat z kanceláře přes PC (např. přes Cayenne portal) - s tím bych si už možná poradil
5) reakce na překážku ve vjezdu při zavírání vrat (reakce na fotobuňky mezi vraty)
Podařilo se mi pro začátek sestrojit kód (viz. níže), který se zatím pouze zaměřuje na požadovanou automatiku (body 1, 2 a 5) a nějak funguje, ale nedaří se mi ukončit zavírání vrat tzn. že pokud doběhne program do konce tak se mi podaří otevřít vrata i vyvoláním překážky mezi vraty (sepnutím fotobuněk), protože to stále reaguje jako při zavírání vrat. Prosím tedy pro začátek o radu jak tento problém vyřešit, případně jak to celé napsat jinak.
Tady je můj kód:
Kód: Vybrat vše
#include <ESP8266WiFi.h>
const char* ssid = "nazevsite";
const char* password = "heslo";
#define RELE 12 // rele motor
#define LED 13 // LED motor
#define tlacitkoOvladani 0 // tlacitko ovládání
#define fotobunkyVrata 14 // fotobunky vrata
//#define koncovySpinac 5 // koncovy spinac vrata
int smycka1 = 0; // pomocna smycka - cekani na otevreni vrat a prujezd aut
int smycka1max = 20; // max.pomocne smycky
void setup(){
Serial.begin(9600);
delay(5000);
WiFi.begin(ssid, password);
Serial.println("");
// Cekani na pripojeni
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Pripojeno k: ");
Serial.println(ssid);
Serial.print("IP adresa: ");
Serial.println(WiFi.localIP());
Serial.println("NASTAVUJI VSTUPY/VYSTUPY");
pinMode(12, OUTPUT);
digitalWrite(12, HIGH); // vypni rele
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); // vypni LED
Serial.println("VYPINAM VYSTUPY");
pinMode(0, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
//pinMode(5, INPUT);
}
void loop(){
if (digitalRead(0) == LOW){ // je stlacene tlacitko ovladani
Serial.println("tlacitko sepnuto");
digitalWrite(12, LOW); // sepni rele vrata (otevri)
digitalWrite(13, LOW); // rozsvit LED
Serial.println("oteviram vrata ...");
delay(1000); // pockej 1s
digitalWrite (12, HIGH); // vypni rele
digitalWrite(13, HIGH); // vypni LED
delay(1000); // pockej 1s
Serial.print("cekam ");
Serial.print(smycka1max);
Serial.println("s nez se otevrou vrata a projede auto ...");
for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ // pomocna smycka - cekani na otevreni vrat a prujezd aut
delay(1000);
Serial.print("Stav: ");
Serial.print(smycka1); // pomocna smycka - cekani na otevreni vrat a prujezd aut
Serial.print("s/");
Serial.print(smycka1max); // pomocna smycka - cekani na otevreni vrat a prujezd aut
Serial.println("s ");
}
while (digitalRead(14) == LOW){ // je neco ve vratech
Serial.println("neco je ve vratech!!!");
digitalWrite (12, HIGH); // vypni rele
digitalWrite(13, HIGH); // vypni LED
delay(1000); // pockej 1s
}
digitalWrite(12, LOW); // sepni rele vrata (zavri)
digitalWrite(13, LOW); // sepni LED
Serial.println("zaviram vrata ...");
delay(1000); // pockej 1s
digitalWrite (12, HIGH); // vypni rele
digitalWrite (13, HIGH); // vypni LED
delay(1000); // pockej 1s
}
if (digitalRead(14) == LOW){ // je neco ve vratech
Serial.println("neco je ve vratech!!!");
digitalWrite(12, LOW); // sepni rele vrata (otevri)
digitalWrite(13, LOW); // rozsvit LED
Serial.println("oteviram vrata ...");
delay(1000); // pockej 1s
digitalWrite (12, HIGH); // vypni rele
digitalWrite (13, HIGH); // vypni LED
delay(1000); // pockej 1s
Serial.print("cekam ");
Serial.print(smycka1max);
Serial.println("s nez se otevrou vrata a projede auto ...");
for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ // pomocna smycka - cekani na otevreni vrat a prujezd aut
delay(1000);
Serial.print("Stav: ");
Serial.print(smycka1); // pomocna smycka - cekani na otevreni vrat a prujezd aut
Serial.print("s/");
Serial.print(smycka1max); // pomocna smycka - cekani na otevreni vrat a prujezd aut
Serial.println("s ");
//delay(20000); // pockej 20s (nez se otevrou vrata a projede auto)
}
digitalWrite(12, LOW); // sepni rele vrata (zavri)
digitalWrite(13, LOW); // sepni LED
Serial.println("zaviram vrata ...");
delay(1000); // pockej 1s
digitalWrite (12, HIGH); // vypni rele
digitalWrite (13, HIGH); // vypni LED
delay(1000); // pockej 1s
}
}