Advertisement
DraKuLa21

Original

Jun 8th, 2019
1,822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Ethernet2.h>
  2. #include <SPI.h>
  3.  
  4.  
  5. // задаем константы
  6. const int ledPin =  A2;     // номер выхода светодиода
  7. const int buttonPin = 2;    // номер входа, подключенный к кнопке
  8. const int Relay1 = 5;       // к 5-ому пину подключено IN1 реле
  9.  
  10. // переменные
  11. boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
  12. boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки
  13. boolean ledOn = false;         // Текущее состояние светодиода (включен/выключен)
  14. boolean Relay1On = true;        // Текущее состояние реле
  15.  
  16. String readString = String(30);
  17.  
  18.  
  19. // объявляем переменную MY_IP со значением 10.36.1.52
  20. #define MY_IP "192.168.1.206"
  21. // указываем настройки сетевого интерфейса и порт веб-сервера
  22. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  23. IPAddress ip(192, 168, 1, 206);
  24. EthernetServer server(80);
  25.  
  26.  
  27. void setup() {
  28.   delay(500);
  29.  
  30. /*
  31.  * без строки "digitalWrite(Relay1, HIGH);" перед "pinMode" при включении
  32.  * ардуины будет происходить кратковременное переключение реле,
  33.  * а значит кратковременно подастся питание, что нам категорически
  34.  * не надо!
  35.  */
  36.   digitalWrite(Relay1, HIGH);
  37.  
  38.   // инициализируем пин, подключенный к светодиоду, как выход
  39.   pinMode(ledPin, OUTPUT);
  40.   // инициализируем пин, подключенный к кнопке, как вход
  41.   pinMode(buttonPin, INPUT);
  42.   // инициализируем пин, подключенный к реле, как выход
  43.   pinMode(Relay1, OUTPUT);
  44.  
  45.  
  46. // стартуем сетевой интерфейс
  47. Ethernet.begin(mac, ip);
  48. server.begin();
  49.  
  50.  
  51. Serial.begin(9600);
  52. Serial.print("server is at ");
  53. Serial.println(Ethernet.localIP());
  54. }
  55.  
  56. /*
  57.  * функция сглаживания дребезга
  58.  * принимает в качестве аргумента предыдущее состояние кнопки
  59.  * и выдаёт фактическое.
  60.  */
  61. boolean debounce(boolean last){
  62.   boolean current = digitalRead(buttonPin);    // Считать состояние кнопки
  63.   if (last != current)                         // Если изменилось ...
  64.   {
  65.   delay(5);                                    // ждём 5 мс
  66.   current = digitalRead(buttonPin);            // Считываем состояние кнопки
  67.   return current;                              // Возвращаем состояние кнопки
  68.   }
  69. }
  70.  
  71. void loop() {
  72.   EthernetClient client = server.available();
  73.   if (client) {
  74.     Serial.println("new client");
  75. //    boolean currentLineIsBlank = true;
  76.     while (client.connected()) {
  77.       if (client.available()) {
  78.         char c = client.read();
  79. //        Serial.write(c);
  80.  
  81. if (readString.length() < 30) {
  82. readString.concat( c); }
  83. Serial.print( c);
  84.        
  85. //if (c == '\n' && currentLineIsBlank) {
  86. if (c == '\n') {
  87. //Проверяем включили ли реле и светодиод?
  88. //Level=1 - включен
  89. //Level=0 - выключен
  90. if(readString.indexOf("Level=1") >=0) {
  91. //Включаем реле
  92. digitalWrite(Relay1, LOW);
  93. Relay1On = false;
  94. //Включаем светодиод
  95. digitalWrite(ledPin, HIGH);
  96. ledOn = true;
  97.  
  98. }else if(readString.indexOf("Level=0") >=0){
  99. //Выключаем реле
  100. digitalWrite(Relay1, HIGH);
  101. Relay1On = true;
  102. //Выключаем светодиод
  103. digitalWrite(ledPin, LOW);
  104. ledOn = false;
  105. }
  106.  
  107.  
  108. client.println("HTTP/1.1 200 OK");
  109. client.println("Content-Type: text/html");
  110. client.println("Connection: close");  // the connection will be closed after completion of the response
  111. //client.println("Refresh: 5");  // refresh the page automatically every 5 sec
  112. client.println();
  113. client.println("<!DOCTYPE HTML>");
  114. client.println("<html>");
  115. client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
  116. client.println("<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"MY_IP"/\"></head>");
  117. client.println(F("<body>"));
  118. client.println(F("<center><head><title>Relay Control</title></head>"));
  119.  
  120. if (Relay1On){
  121. client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить");
  122. client.println("<input type=radio name=Level value=0>Выключить");
  123. client.println("<input type=submit value=Применить></form>");
  124. client.println("<font size=’5′>Состояние реле: ");
  125. client.println("<font size=’5′>Выкл.");
  126. client.println("<br></br>");
  127. }else{
  128. client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить");
  129. client.println("<input type=radio name=Level value=0 CHECKED>Выключить");
  130. client.println("<input type=submit value=Применить></form>");
  131. client.println("<font size=’5′>Состояние реле: ");
  132. client.println("<font size=’5′>Вкл");
  133. client.println("<br></br>");
  134. }
  135.  
  136. //client.print(F("<input type=button value='Main Light ON' onmousedown=location.href='/?LED_on'>"));
  137. //client.println(F("<input type=button value='Main Light OFF' onmousedown=location.href='/?LED_off'><br/><br/>"));
  138. client.println("<a href=\"/?Level=1\"\">Turn On Light</a><br />");
  139. client.println("<a href=\"/?Level=0\"\">Turn Off Light</a><br />");
  140. client.println(F("</center></body>"));
  141. client.println("</html>");
  142. readString="";
  143. //останавливаем web-client
  144. client.stop();
  145.           }
  146.         }
  147.       }
  148.     }
  149.  
  150. // часть кода для кнопки, реле и светодиода
  151. currentButton = debounce(lastButton);
  152. if (lastButton == LOW && currentButton == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  153. {
  154.   ledOn = !ledOn;
  155. }
  156. if (lastButton == LOW && currentButton == HIGH)   // Если нажатие (условие для реле)
  157. {
  158.   Relay1On = !Relay1On;
  159. }
  160. lastButton = currentButton;
  161. digitalWrite(ledPin, ledOn);                         // Изменить статус состояния светодиода
  162. digitalWrite(Relay1, Relay1On);                         // Изменить статус состояния реле
  163.  
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement