Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- #include <arduino_secrets.h>
- const char* ssid = YOUR_SSID;
- const char* password = YOUR_PASSWORD;
- const int switch1Pin = D1;
- const int switch2Pin = D2;
- const int emergencyPin = D3;
- const int relayOpenPin = D5; // Relé pre otvorenie brány
- const int relayClosePin = D6; // Relé pre zatvorenie brány
- const int ledOpenPin = D7; // LED pre otvorenú bránu
- const int ledClosePin = D8; // LED pre zatvorenú bránu
- const bool relayActiveHigh = true; // Nastav na true, ak je relé aktívne HIGH, inak false
- ESP8266WebServer server(80);
- bool emergencyActivated = false; // Premenná na sledovanie stavu núdzového režimu
- // Deklarácie funkcií
- void handleRoot();
- void handleOpenGate();
- void handleCloseGate();
- void checkSwitches();
- void handleEmergency();
- void setRelayState(int pin, bool state); // Pridanie deklarácie funkcie
- void setup() {
- Serial.begin(115200);
- pinMode(switch1Pin, INPUT); // NO spínač
- pinMode(switch2Pin, INPUT); // NO spínač
- pinMode(emergencyPin, INPUT); // NO spínač
- pinMode(relayOpenPin, OUTPUT);
- pinMode(relayClosePin, OUTPUT);
- pinMode(ledOpenPin, OUTPUT);
- pinMode(ledClosePin, OUTPUT);
- // Pripojenie k Wi-Fi
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.println("Connecting to WiFi...");
- }
- Serial.println("Connected to WiFi");
- // Nastavenie HTTP servera
- server.on("/", handleRoot);
- server.on("/open", handleOpenGate);
- server.on("/close", handleCloseGate);
- server.begin();
- Serial.println("HTTP server started");
- }
- void loop() {
- int emergencyState = digitalRead(emergencyPin);
- // Ak je núdzové tlačidlo stlačené, aktivuje núdzový režim
- if (emergencyState == LOW) {
- emergencyActivated = true;
- }
- // Ak je núdzový režim aktivovaný, vykoná núdzovú akciu
- if (emergencyActivated) {
- handleEmergency();
- }
- checkSwitches();
- server.handleClient();
- }
- void checkSwitches() {
- int switch1State = digitalRead(switch1Pin);
- int switch2State = digitalRead(switch2Pin);
- int emergencyState = digitalRead(emergencyPin);
- // Stav 1: Brána zatvorená, spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo nestlačené
- if (switch1State == HIGH && switch2State == LOW && emergencyState == HIGH) {
- setRelayState(relayOpenPin, false); // Relé 1 vypnuté
- setRelayState(relayClosePin, false); // Relé 2 vypnuté
- }
- // Stav 2: Spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo stlačené
- if (switch1State == HIGH && switch2State == LOW && emergencyState == LOW) {
- setRelayState(relayOpenPin, true); // Relé 1 zapnuté
- setRelayState(relayClosePin, false); // Relé 2 vypnuté
- }
- // Stav 3: Spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo uvoľnené, relé 1 zostáva zapnuté
- if (switch1State == HIGH && switch2State == LOW && emergencyState == HIGH) {
- setRelayState(relayOpenPin, true); // Relé 1 zostáva zapnuté
- setRelayState(relayClosePin, false); // Relé 2 vypnuté
- }
- // Stav 3 pokračovanie: Spínač 2 prejde do HIGH, signalizuje celkové otvorenie brány
- if (switch1State == HIGH && switch2State == HIGH && emergencyState == HIGH) {
- setRelayState(relayOpenPin, false); // Relé 1 vypnuté
- setRelayState(relayClosePin, false); // Relé 2 vypnuté
- }
- // Stav 4: Spínač 1 LOW, spínač 2 HIGH, núdzové tlačidlo uvoľnené
- if (switch1State == LOW && switch2State == HIGH && emergencyState == HIGH) {
- setRelayState(relayOpenPin, false); // Relé 1 vypnuté
- setRelayState(relayClosePin, false); // Relé 2 vypnuté
- // Čaká na ďalšie inštrukcie
- }
- // Stav 5: Inštrukcia zatvoriť bránu, spínač 1 LOW, spínač 2 HIGH, núdzové tlačidlo stlačené
- if (switch1State == LOW && switch2State == HIGH && emergencyState == LOW) {
- setRelayState(relayOpenPin, false); // Relé 1 vypnuté
- setRelayState(relayClosePin, true); // Relé 2 zapnuté
- // Čaká, kým spínač 1 neprejde do HIGH
- while (digitalRead(switch1Pin) == LOW) {
- delay(100); // Krátke oneskorenie na kontrolu stavu
- }
- setRelayState(relayClosePin, false); // Relé 2 vypnuté po dosiahnutí HIGH na spínači 1
- }
- // Zobrazenie stavov v Serial monitore
- Serial.print("Switch 1: ");
- Serial.print(switch1State == LOW ? "LOW" : "HIGH");
- Serial.print(", Switch 2: ");
- Serial.print(switch2State == LOW ? "LOW" : "HIGH");
- Serial.print(", Emergency: ");
- Serial.println(emergencyState == LOW ? "PRESSED" : "NOT PRESSED");
- }
- void handleRoot() {
- String html = "<html><head><style>";
- html += "body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }";
- html += "h1 { color: #333; }";
- html += "a { display: inline-block; margin: 20px; padding: 20px; font-size: 20px; color: white; background-color: #007BFF; text-decoration: none; border-radius: 5px; }";
- html += "a:hover { background-color: #0056b3; }";
- html += "</style></head><body>";
- html += "<h1>Gate Control</h1>";
- html += "<p><a href=\"/open\">Open Gate</a></p>";
- html += "<p><a href=\"/close\">Close Gate</a></p>";
- html += "</body></html>";
- server.send(200, "text/html", html);
- }
- void handleOpenGate() {
- setRelayState(relayOpenPin, true);
- setRelayState(relayClosePin, false);
- digitalWrite(ledOpenPin, HIGH); // Zapne LED pre otvorenú bránu
- digitalWrite(ledClosePin, LOW); // Vypne LED pre zatvorenú bránu
- server.send(200, "text/plain", "Gate is OPEN");
- checkSwitches(); // Kontrola spínačov po otvorení brány
- }
- void handleCloseGate() {
- setRelayState(relayOpenPin, false);
- setRelayState(relayClosePin, true);
- digitalWrite(ledOpenPin, LOW); // Vypne LED pre otvorenú bránu
- digitalWrite(ledClosePin, HIGH); // Zapne LED pre zatvorenú bránu
- server.send(200, "text/plain", "Gate is CLOSED");
- checkSwitches(); // Kontrola spínačov po zatvorení brány
- }
- void handleEmergency() {
- // Núdzový režim je aktivovaný, vykoná sa príslušná akcia podľa stavu spínačov
- checkSwitches();
- // Deaktivuje núdzový režim po vykonaní akcie
- emergencyActivated = false;
- }
- void setRelayState(int pin, bool state) {
- if (relayActiveHigh) {
- digitalWrite(pin, state ? HIGH : LOW);
- } else {
- digitalWrite(pin, state ? LOW : HIGH);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement