Advertisement
DraKuLa21

Custom

Jun 8th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 14.02 KB | None | 0 0
  1. #include <Ethernet2.h>
  2. #include <SPI.h>
  3.  
  4.  
  5. // задаем константы
  6. const int ledPin =  A0;     // номер выхода светодиода
  7. const int led2Pin =  A1;
  8. const int led3Pin =  A2;
  9. const int led4Pin =  A3;
  10. const int led5Pin =  A4;
  11. const int led6Pin =  A5;
  12. const int buttonPin = 2;    // номер входа, подключенный к кнопке
  13. const int button2Pin = 3;
  14. const int button3Pin = 4;
  15. const int button4Pin = 5;
  16. const int button5Pin = 6;
  17. const int button6Pin = 7;
  18.  
  19.  
  20. // переменные
  21. boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
  22. boolean last2Button = LOW;
  23. boolean last3Button = LOW;
  24. boolean last4Button = LOW;
  25. boolean last5Button = LOW;
  26. boolean last6Button = LOW;
  27. boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки
  28. boolean current2Button = LOW;
  29. boolean current3Button = LOW;
  30. boolean current4Button = LOW;
  31. boolean current5Button = LOW;
  32. boolean current6Button = LOW;
  33. boolean ledOn = false;         // Текущее состояние светодиода (включен/выключен)
  34. boolean led2On = false;  
  35. boolean led3On = false;  
  36. boolean led4On = false;  
  37. boolean led5On = false;  
  38. boolean led6On = false;  
  39.  
  40.  
  41. String readString = String(30);
  42.  
  43.  
  44. // объявляем переменную MY_IP со значением 10.36.1.52
  45. #define MY_IP "192.168.1.206"
  46. // указываем настройки сетевого интерфейса и порт веб-сервера
  47. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  48. IPAddress ip(192, 168, 1, 206);
  49. EthernetServer server(80);
  50.  
  51.  
  52. void setup() {
  53.   delay(500);
  54.  
  55. /*
  56.  * без строки "digitalWrite(Relay1, HIGH);" перед "pinMode" при включении
  57.  * ардуины будет происходить кратковременное переключение реле,
  58.  * а значит кратковременно подастся питание, что нам категорически
  59.  * не надо!
  60.  */
  61.   digitalWrite(ledPin, LOW);
  62.   digitalWrite(led2Pin, LOW);
  63.   digitalWrite(led3Pin, LOW);
  64.   digitalWrite(led4Pin, LOW);
  65.   digitalWrite(led5Pin, LOW);
  66.   digitalWrite(led6Pin, LOW);
  67.  
  68.   // инициализируем пин, подключенный к светодиоду, как выход
  69.   pinMode(ledPin, OUTPUT);
  70.   pinMode(led2Pin, OUTPUT);
  71.   pinMode(led3Pin, OUTPUT);
  72.   pinMode(led4Pin, OUTPUT);
  73.   pinMode(led5Pin, OUTPUT);
  74.   pinMode(led6Pin, OUTPUT);
  75.   // инициализируем пин, подключенный к кнопке, как вход
  76.   pinMode(buttonPin, INPUT);
  77.   pinMode(button2Pin, INPUT);
  78.   pinMode(button3Pin, INPUT);
  79.   pinMode(button4Pin, INPUT);
  80.   pinMode(button5Pin, INPUT);
  81.   pinMode(button6Pin, INPUT);
  82.  
  83.  
  84.  
  85. // стартуем сетевой интерфейс
  86. Ethernet.begin(mac, ip);
  87. server.begin();
  88.  
  89.  
  90. Serial.begin(9600);
  91. Serial.print("server is at ");
  92. Serial.println(Ethernet.localIP());
  93. }
  94.  
  95. /*
  96.  * функция сглаживания дребезга
  97.  * принимает в качестве аргумента предыдущее состояние кнопки
  98.  * и выдаёт фактическое.
  99.  */
  100. boolean debounce(boolean last){
  101.   boolean current = digitalRead(buttonPin);    // Считать состояние кнопки
  102.   if (last != current)                         // Если изменилось ...
  103.   {
  104.   delay(5);                                    // ждём 5 мс
  105.   current = digitalRead(buttonPin);            // Считываем состояние кнопки
  106.   return current;                              // Возвращаем состояние кнопки
  107.   }
  108. }
  109.  
  110. boolean debounce2(boolean last){
  111.   boolean current = digitalRead(button2Pin);    // Считать состояние кнопки
  112.   if (last != current)                         // Если изменилось ...
  113.   {
  114.   delay(5);                                    // ждём 5 мс
  115.   current = digitalRead(button2Pin);            // Считываем состояние кнопки
  116.   return current;                              // Возвращаем состояние кнопки
  117.   }
  118. }
  119.  
  120. boolean debounce3(boolean last){
  121.   boolean current = digitalRead(button3Pin);    // Считать состояние кнопки
  122.   if (last != current)                         // Если изменилось ...
  123.   {
  124.   delay(100);                                    // ждём 5 мс
  125.   current = digitalRead(button3Pin);            // Считываем состояние кнопки
  126.   return current;                              // Возвращаем состояние кнопки
  127.   }
  128. }
  129.  
  130. boolean debounce4(boolean last){
  131.   boolean current = digitalRead(button4Pin);    // Считать состояние кнопки
  132.   if (last != current)                         // Если изменилось ...
  133.   {
  134.   delay(5);                                    // ждём 5 мс
  135.   current = digitalRead(button4Pin);            // Считываем состояние кнопки
  136.   return current;                              // Возвращаем состояние кнопки
  137.   }
  138. }
  139.  
  140. boolean debounce5(boolean last){
  141.   boolean current = digitalRead(button5Pin);    // Считать состояние кнопки
  142.   if (last != current)                         // Если изменилось ...
  143.   {
  144.   delay(5);                                    // ждём 5 мс
  145.   current = digitalRead(button5Pin);            // Считываем состояние кнопки
  146.   return current;                              // Возвращаем состояние кнопки
  147.   }
  148. }
  149.  
  150. boolean debounce6(boolean last){
  151.   boolean current = digitalRead(button6Pin);    // Считать состояние кнопки
  152.   if (last != current)                         // Если изменилось ...
  153.   {
  154.   delay(5);                                    // ждём 5 мс
  155.   current = digitalRead(button6Pin);            // Считываем состояние кнопки
  156.   return current;                              // Возвращаем состояние кнопки
  157.   }
  158. }
  159.  
  160. void loop() {
  161.   EthernetClient client = server.available();
  162.   if (client) {
  163.     Serial.println("new client");
  164. //    boolean currentLineIsBlank = true;
  165.     while (client.connected()) {
  166.       if (client.available()) {
  167.         char c = client.read();
  168. //        Serial.write(c);
  169.  
  170. if (readString.length() < 30) {
  171. readString.concat( c); }
  172. Serial.print( c);
  173.        
  174. //if (c == '\n' && currentLineIsBlank) {
  175. if (c == '\n') {
  176. //Проверяем включили ли реле и светодиод?
  177. //Level=1 - включен
  178. //Level=0 - выключен
  179. if(readString.indexOf("Level=1") >=0) {
  180. //Включаем светодиод
  181. digitalWrite(ledPin, HIGH);
  182. ledOn = true;
  183.  
  184. }else if(readString.indexOf("Level=0") >=0){
  185. //Выключаем светодиод
  186. digitalWrite(ledPin, LOW);
  187. ledOn = false;
  188. }
  189.  
  190. if(readString.indexOf("Level2=1") >=0) {
  191. //Включаем светодиод
  192. digitalWrite(led2Pin, HIGH);
  193. led2On = true;
  194.  
  195. }else if(readString.indexOf("Level2=0") >=0){
  196. //Выключаем светодиод
  197. digitalWrite(led2Pin, LOW);
  198. led2On = false;
  199. }
  200.  
  201.  
  202. if(readString.indexOf("Level3=1") >=0) {
  203. //Включаем светодиод
  204. digitalWrite(led3Pin, HIGH);
  205. led3On = true;
  206.  
  207. }else if(readString.indexOf("Level3=0") >=0){
  208. //Выключаем светодиод
  209. digitalWrite(led3Pin, LOW);
  210. led3On = false;
  211. }
  212.  
  213.  
  214. if(readString.indexOf("Level4=1") >=0) {
  215. //Включаем светодиод
  216. digitalWrite(led4Pin, HIGH);
  217. led4On = true;
  218.  
  219. }else if(readString.indexOf("Level4=0") >=0){
  220. //Выключаем светодиод
  221. digitalWrite(led4Pin, LOW);
  222. led4On = false;
  223. }
  224.  
  225.  
  226. if(readString.indexOf("Level5=1") >=0) {
  227. //Включаем светодиод
  228. digitalWrite(led5Pin, HIGH);
  229. led5On = true;
  230.  
  231. }else if(readString.indexOf("Level5=0") >=0){
  232. //Выключаем светодиод
  233. digitalWrite(led5Pin, LOW);
  234. led5On = false;
  235. }
  236.  
  237.  
  238. if(readString.indexOf("Level6=1") >=0) {
  239. //Включаем светодиод
  240. digitalWrite(led6Pin, HIGH);
  241. led6On = true;
  242.  
  243. }else if(readString.indexOf("Level6=0") >=0){
  244. //Выключаем светодиод
  245. digitalWrite(led6Pin, LOW);
  246. led6On = false;
  247. }
  248.  
  249. if(readString.indexOf("Level10=1") >=0) {
  250. //Включаем светодиод
  251. digitalWrite(ledPin, HIGH);
  252. digitalWrite(led2Pin, HIGH);
  253. digitalWrite(led3Pin, HIGH);
  254. digitalWrite(led4Pin, HIGH);
  255. digitalWrite(led5Pin, HIGH);
  256. digitalWrite(led6Pin, HIGH);
  257.  
  258. ledOn = true;
  259. led2On = true;
  260. led3On = true;
  261. led4On = true;
  262. led5On = true;
  263. led6On = true;
  264.  
  265. }else if(readString.indexOf("Level10=0") >=0){
  266. //Выключаем светодиод
  267. digitalWrite(ledPin, LOW);
  268. digitalWrite(led2Pin, LOW);
  269. digitalWrite(led3Pin, LOW);
  270. digitalWrite(led4Pin, LOW);
  271. digitalWrite(led5Pin, LOW);
  272. digitalWrite(led6Pin, LOW);
  273.  
  274. ledOn = false;
  275. led2On = false;
  276. led3On = false;
  277. led4On = false;
  278. led5On = false;
  279. led6On = false;
  280. }
  281.  
  282. client.println("HTTP/1.1 200 OK");
  283. client.println("Content-Type: text/html");
  284. client.println("Connection: close");  // the connection will be closed after completion of the response
  285. //client.println("Refresh: 5");  // refresh the page automatically every 5 sec
  286. client.println();
  287. client.println("<!DOCTYPE HTML>");
  288. client.println("<html>");
  289. client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
  290. client.println("<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"MY_IP"/\"></head>");
  291. client.println(F("<body>"));
  292. client.println(F("<center><head><title>Управление светом</title></head>"));
  293.  
  294. client.print(F("<input type=button value='Моя комната | ON' onmousedown=location.href='/?Level=1'>"));
  295. client.println(F("<input type=button value='Моя комната | OFF' onmousedown=location.href='/?Level=0'><br/><br/>"));
  296. client.print(F("<input type=button value='Ванна | ON' onmousedown=location.href='/?Level2=1'>"));
  297. client.println(F("<input type=button value='Ванна | OFF' onmousedown=location.href='/?Level2=0'><br/><br/>"));
  298. client.print(F("<input type=button value='Туалет | ON' onmousedown=location.href='/?Level3=1'>"));
  299. client.println(F("<input type=button value='Туалет | OFF' onmousedown=location.href='/?Level3=0'><br/><br/>"));
  300. client.print(F("<input type=button value='Кухня | ON' onmousedown=location.href='/?Level4=1'>"));
  301. client.println(F("<input type=button value='Кухня | OFF' onmousedown=location.href='/?Level4=0'><br/><br/>"));
  302. client.print(F("<input type=button value='Спальня | ON' onmousedown=location.href='/?Level5=1'>"));
  303. client.println(F("<input type=button value='Спальня | OFF' onmousedown=location.href='/?Level5=0'><br/><br/>"));
  304. client.print(F("<input type=button value='Коридор | ON' onmousedown=location.href='/?Level6=1'>"));
  305. client.println(F("<input type=button value='Коридор | OFF' onmousedown=location.href='/?Level6=0'><br/><br/>"));
  306. client.print(F("<input type=button value='ON ALL' onmousedown=location.href='/?Level10=1'>"));
  307. client.println(F("<input type=button value='OFF ALL' onmousedown=location.href='/?Level10=0'><br/><br/>"));
  308. //client.println("<a href=\"/?Level=1\"\">Turn On Light</a><br />");
  309. //client.println("<a href=\"/?Level=0\"\">Turn Off Light</a><br />");
  310. //client.println("<a href=\"/?Level2=1\"\">Turn On 2 Light</a><br />");
  311. //client.println("<a href=\"/?Level2=0\"\">Turn Off 2 Light</a><br />");
  312. client.println(F("</center></body>"));
  313. client.println("</html>");
  314. readString="";
  315. //останавливаем web-client
  316. client.stop();
  317.           }
  318.         }
  319.       }
  320.     }
  321.  
  322. // часть кода для кнопки, реле и светодиода
  323. currentButton = debounce(lastButton);
  324. if (lastButton == LOW && currentButton == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  325. {
  326.   ledOn = !ledOn;
  327. }
  328.  
  329.  
  330. lastButton = currentButton;
  331. digitalWrite(ledPin, ledOn);                         // Изменить статус состояния светодиода
  332.  
  333.  
  334. current2Button = debounce2(last2Button);
  335. if (last2Button == LOW && current2Button == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  336. {
  337.   led2On = !led2On;
  338. }
  339.  
  340.  
  341. last2Button = current2Button;
  342. digitalWrite(led2Pin, led2On);                         // Изменить статус состояния светодиода
  343.  
  344.  
  345. current3Button = debounce3(last3Button);
  346. if (last3Button == LOW && current3Button == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  347. {
  348.   led3On = !led3On;
  349. }
  350.  
  351.  
  352. last3Button = current3Button;
  353. digitalWrite(led3Pin, led3On);                         // Изменить статус состояния светодиода
  354.  
  355.  
  356. current4Button = debounce4(last4Button);
  357. if (last4Button == LOW && current4Button == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  358. {
  359.   led4On = !led4On;
  360. }
  361.  
  362.  
  363. last4Button = current4Button;
  364. digitalWrite(led4Pin, led4On);                         // Изменить статус состояния светодиода
  365.  
  366. current5Button = debounce5(last5Button);
  367. if (last5Button == LOW && current5Button == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  368. {
  369.   led5On = !led5On;
  370. }
  371.  
  372.  
  373. last5Button = current5Button;
  374. digitalWrite(led5Pin, led5On);                         // Изменить статус состояния светодиода
  375.  
  376. current6Button = debounce6(last6Button);
  377. if (last6Button == LOW && current6Button == HIGH)   // Если нажатие (условия для светодиода на пине 6)
  378. {
  379.   led6On = !led6On;
  380. }
  381.  
  382.  
  383. last6Button = current6Button;
  384. digitalWrite(led6Pin, led6On);                         // Изменить статус состояния светодиода
  385. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement