Advertisement
Nemo1979

Untitled

Sep 26th, 2024 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.31 KB | Source Code | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266WebServer.h>
  3. #include <arduino_secrets.h>
  4.  
  5. const char* ssid = YOUR_SSID;
  6. const char* password = YOUR_PASSWORD;
  7.  
  8. const int switch1Pin = D1;
  9. const int switch2Pin = D2;
  10. const int emergencyPin = D3;
  11. const int relayOpenPin = D5; // Relé pre otvorenie brány
  12. const int relayClosePin = D6; // Relé pre zatvorenie brány
  13. const int ledOpenPin = D7; // LED pre otvorenú bránu
  14. const int ledClosePin = D8; // LED pre zatvorenú bránu
  15.  
  16. const bool relayActiveHigh = true; // Nastav na true, ak je relé aktívne HIGH, inak false
  17.  
  18. ESP8266WebServer server(80);
  19.  
  20. bool emergencyActivated = false; // Premenná na sledovanie stavu núdzového režimu
  21.  
  22. // Deklarácie funkcií
  23. void handleRoot();
  24. void handleOpenGate();
  25. void handleCloseGate();
  26. void checkSwitches();
  27. void handleEmergency();
  28. void setRelayState(int pin, bool state); // Pridanie deklarácie funkcie
  29.  
  30. void setup() {
  31.   Serial.begin(115200);
  32.   pinMode(switch1Pin, INPUT); // NO spínač
  33.   pinMode(switch2Pin, INPUT); // NO spínač
  34.   pinMode(emergencyPin, INPUT); // NO spínač
  35.   pinMode(relayOpenPin, OUTPUT);
  36.   pinMode(relayClosePin, OUTPUT);
  37.   pinMode(ledOpenPin, OUTPUT);
  38.   pinMode(ledClosePin, OUTPUT);
  39.  
  40.   // Pripojenie k Wi-Fi
  41.   WiFi.begin(ssid, password);
  42.   while (WiFi.status() != WL_CONNECTED) {
  43.     delay(1000);
  44.     Serial.println("Connecting to WiFi...");
  45.   }
  46.   Serial.println("Connected to WiFi");
  47.  
  48.   // Nastavenie HTTP servera
  49.   server.on("/", handleRoot);
  50.   server.on("/open", handleOpenGate);
  51.   server.on("/close", handleCloseGate);
  52.   server.begin();
  53.   Serial.println("HTTP server started");
  54. }
  55.  
  56. void loop() {
  57.   int emergencyState = digitalRead(emergencyPin);
  58.  
  59.   // Ak je núdzové tlačidlo stlačené, aktivuje núdzový režim
  60.   if (emergencyState == LOW) {
  61.     emergencyActivated = true;
  62.   }
  63.  
  64.   // Ak je núdzový režim aktivovaný, vykoná núdzovú akciu
  65.   if (emergencyActivated) {
  66.     handleEmergency();
  67.   }
  68.  
  69.   checkSwitches();
  70.   server.handleClient();
  71. }
  72.  
  73. void checkSwitches() {
  74.   int switch1State = digitalRead(switch1Pin);
  75.   int switch2State = digitalRead(switch2Pin);
  76.   int emergencyState = digitalRead(emergencyPin);
  77.  
  78.   // Stav 1: Brána zatvorená, spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo nestlačené
  79.   if (switch1State == HIGH && switch2State == LOW && emergencyState == HIGH) {
  80.     setRelayState(relayOpenPin, false); // Relé 1 vypnuté
  81.     setRelayState(relayClosePin, false); // Relé 2 vypnuté
  82.   }
  83.  
  84.   // Stav 2: Spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo stlačené
  85.   if (switch1State == HIGH && switch2State == LOW && emergencyState == LOW) {
  86.     setRelayState(relayOpenPin, true); // Relé 1 zapnuté
  87.     setRelayState(relayClosePin, false); // Relé 2 vypnuté
  88.   }
  89.  
  90.   // Stav 3: Spínač 1 HIGH, spínač 2 LOW, núdzové tlačidlo uvoľnené, relé 1 zostáva zapnuté
  91.   if (switch1State == HIGH && switch2State == LOW && emergencyState == HIGH) {
  92.     setRelayState(relayOpenPin, true); // Relé 1 zostáva zapnuté
  93.     setRelayState(relayClosePin, false); // Relé 2 vypnuté
  94.   }
  95.  
  96.   // Stav 3 pokračovanie: Spínač 2 prejde do HIGH, signalizuje celkové otvorenie brány
  97.   if (switch1State == HIGH && switch2State == HIGH && emergencyState == HIGH) {
  98.     setRelayState(relayOpenPin, false); // Relé 1 vypnuté
  99.     setRelayState(relayClosePin, false); // Relé 2 vypnuté
  100.   }
  101.  
  102.   // Stav 4: Spínač 1 LOW, spínač 2 HIGH, núdzové tlačidlo uvoľnené
  103.   if (switch1State == LOW && switch2State == HIGH && emergencyState == HIGH) {
  104.     setRelayState(relayOpenPin, false); // Relé 1 vypnuté
  105.     setRelayState(relayClosePin, false); // Relé 2 vypnuté
  106.     // Čaká na ďalšie inštrukcie
  107.   }
  108.  
  109.   // Stav 5: Inštrukcia zatvoriť bránu, spínač 1 LOW, spínač 2 HIGH, núdzové tlačidlo stlačené
  110.   if (switch1State == LOW && switch2State == HIGH && emergencyState == LOW) {
  111.     setRelayState(relayOpenPin, false); // Relé 1 vypnuté
  112.     setRelayState(relayClosePin, true); // Relé 2 zapnuté
  113.     // Čaká, kým spínač 1 neprejde do HIGH
  114.     while (digitalRead(switch1Pin) == LOW) {
  115.       delay(100); // Krátke oneskorenie na kontrolu stavu
  116.     }
  117.     setRelayState(relayClosePin, false); // Relé 2 vypnuté po dosiahnutí HIGH na spínači 1
  118.   }
  119.  
  120.   // Zobrazenie stavov v Serial monitore
  121.   Serial.print("Switch 1: ");
  122.   Serial.print(switch1State == LOW ? "LOW" : "HIGH");
  123.   Serial.print(", Switch 2: ");
  124.   Serial.print(switch2State == LOW ? "LOW" : "HIGH");
  125.   Serial.print(", Emergency: ");
  126.   Serial.println(emergencyState == LOW ? "PRESSED" : "NOT PRESSED");
  127. }
  128.  
  129. void handleRoot() {
  130.   String html = "<html><head><style>";
  131.   html += "body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }";
  132.   html += "h1 { color: #333; }";
  133.   html += "a { display: inline-block; margin: 20px; padding: 20px; font-size: 20px; color: white; background-color: #007BFF; text-decoration: none; border-radius: 5px; }";
  134.   html += "a:hover { background-color: #0056b3; }";
  135.   html += "</style></head><body>";
  136.   html += "<h1>Gate Control</h1>";
  137.   html += "<p><a href=\"/open\">Open Gate</a></p>";
  138.   html += "<p><a href=\"/close\">Close Gate</a></p>";
  139.   html += "</body></html>";
  140.   server.send(200, "text/html", html);
  141. }
  142.  
  143. void handleOpenGate() {
  144.   setRelayState(relayOpenPin, true);
  145.   setRelayState(relayClosePin, false);
  146.   digitalWrite(ledOpenPin, HIGH); // Zapne LED pre otvorenú bránu
  147.   digitalWrite(ledClosePin, LOW); // Vypne LED pre zatvorenú bránu
  148.   server.send(200, "text/plain", "Gate is OPEN");
  149.   checkSwitches(); // Kontrola spínačov po otvorení brány
  150. }
  151.  
  152. void handleCloseGate() {
  153.   setRelayState(relayOpenPin, false);
  154.   setRelayState(relayClosePin, true);
  155.   digitalWrite(ledOpenPin, LOW); // Vypne LED pre otvorenú bránu
  156.   digitalWrite(ledClosePin, HIGH); // Zapne LED pre zatvorenú bránu
  157.   server.send(200, "text/plain", "Gate is CLOSED");
  158.   checkSwitches(); // Kontrola spínačov po zatvorení brány
  159. }
  160.  
  161. void handleEmergency() {
  162.   // Núdzový režim je aktivovaný, vykoná sa príslušná akcia podľa stavu spínačov
  163.   checkSwitches();
  164.  
  165.   // Deaktivuje núdzový režim po vykonaní akcie
  166.   emergencyActivated = false;
  167. }
  168.  
  169. void setRelayState(int pin, bool state) {
  170.   if (relayActiveHigh) {
  171.     digitalWrite(pin, state ? HIGH : LOW);
  172.   } else {
  173.     digitalWrite(pin, state ? LOW : HIGH);
  174.   }
  175. }
  176.  
  177.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement