Arduino UNO + W5500
- Войдите на сайт для отправки комментариев
Пнд, 10/06/2019 - 20:58
Всем привет. Имеется скетч, который должен включать свет в 6 местах в помощью 6 кнопок и веб интерфейса. Всё работает нормально, ха исключением одного: при включении ардуино первые четыре канала включаются сами, хотя в сетапе указано, что сначала все каналы должны быть выключены + все входы и выходы подтянуты к земле резюками на 10 кОм. Вручную всё нормально включается и выключается. После ресета все выходы выключены, проблема только при включении ардуино. Также пробовал в коде менять местами пины для входа и выхода (например, сейчас выход на свет это аналоговые выходы, кнопки - цифровые, а делал свет на цифровые, кнопки на аналоговые), результат тот же.
#include <Ethernet2.h> #include <SPI.h> // задаем константы const int ledPin = 2; // номер выхода светодиода const int led2Pin = 3; const int led3Pin = 4; const int led4Pin = 5; const int led5Pin = 6; const int led6Pin = 7; const int buttonPin = A0; // номер входа, подключенный к кнопке const int button2Pin = A1; const int button3Pin = A2; const int button4Pin = A3; const int button5Pin = A4; const int button6Pin = A5; const int led7Pin = 8; // переменные boolean lastButton = LOW; // Переменная для сохранения предыдущего состояния кнопки boolean last2Button = LOW; boolean last3Button = LOW; boolean last4Button = LOW; boolean last5Button = LOW; boolean last6Button = LOW; boolean currentButton = LOW; // Переменная для сохранения текущего состояния кнопки boolean current2Button = LOW; boolean current3Button = LOW; boolean current4Button = LOW; boolean current5Button = LOW; boolean current6Button = LOW; boolean ledOn = false; // Текущее состояние светодиода (включен/выключен) boolean led2On = false; boolean led3On = false; boolean led4On = false; boolean led5On = false; boolean led6On = false; boolean led7On = false; String readString = String(30); // объявляем переменную MY_IP со значением 10.36.1.52 #define MY_IP "192.168.1.206" // указываем настройки сетевого интерфейса и порт веб-сервера byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 206); EthernetServer server(80); void setup() { delay(500); /* * без строки "digitalWrite(Relay1, HIGH);" перед "pinMode" при включении * ардуины будет происходить кратковременное переключение реле, * а значит кратковременно подастся питание, что нам категорически * не надо! */ // инициализируем пин, подключенный к светодиоду, как выход pinMode(ledPin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); pinMode(led5Pin, OUTPUT); pinMode(led6Pin, OUTPUT); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT); pinMode(button5Pin, INPUT); pinMode(button6Pin, INPUT); pinMode(led7Pin, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); digitalWrite(led4Pin, LOW); digitalWrite(led5Pin, LOW); digitalWrite(led6Pin, LOW); // стартуем сетевой интерфейс Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } /* * функция сглаживания дребезга * принимает в качестве аргумента предыдущее состояние кнопки * и выдаёт фактическое. */ boolean debounce(boolean last){ boolean current = digitalRead(buttonPin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(buttonPin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce2(boolean last){ boolean current = digitalRead(button2Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button2Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce3(boolean last){ boolean current = digitalRead(button3Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(100); // ждём 5 мс current = digitalRead(button3Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce4(boolean last){ boolean current = digitalRead(button4Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button4Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce5(boolean last){ boolean current = digitalRead(button5Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button5Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce6(boolean last){ boolean current = digitalRead(button6Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button6Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); // boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // Serial.write(c); if (readString.length() < 30) { readString.concat( c); } Serial.print( c); //if (c == '\n' && currentLineIsBlank) { if (c == '\n') { //Проверяем включили ли реле и светодиод? //Level=1 - включен //Level=0 - выключен if(readString.indexOf("Level=1") >=0) { //Включаем светодиод digitalWrite(ledPin, HIGH); ledOn = true; }else if(readString.indexOf("Level=0") >=0){ //Выключаем светодиод digitalWrite(ledPin, LOW); ledOn = false; } if(readString.indexOf("Level2=1") >=0) { //Включаем светодиод digitalWrite(led2Pin, HIGH); led2On = true; }else if(readString.indexOf("Level2=0") >=0){ //Выключаем светодиод digitalWrite(led2Pin, LOW); led2On = false; } if(readString.indexOf("Level3=1") >=0) { //Включаем светодиод digitalWrite(led3Pin, HIGH); led3On = true; }else if(readString.indexOf("Level3=0") >=0){ //Выключаем светодиод digitalWrite(led3Pin, LOW); led3On = false; } if(readString.indexOf("Level4=1") >=0) { //Включаем светодиод digitalWrite(led4Pin, HIGH); led4On = true; }else if(readString.indexOf("Level4=0") >=0){ //Выключаем светодиод digitalWrite(led4Pin, LOW); led4On = false; } if(readString.indexOf("Level5=1") >=0) { //Включаем светодиод digitalWrite(led5Pin, HIGH); led5On = true; }else if(readString.indexOf("Level5=0") >=0){ //Выключаем светодиод digitalWrite(led5Pin, LOW); led5On = false; } if(readString.indexOf("Level6=1") >=0) { //Включаем светодиод digitalWrite(led6Pin, HIGH); led6On = true; }else if(readString.indexOf("Level6=0") >=0){ //Выключаем светодиод digitalWrite(led6Pin, LOW); led6On = false; } if(readString.indexOf("Level10=1") >=0) { //Включаем светодиод digitalWrite(ledPin, HIGH); digitalWrite(led2Pin, HIGH); digitalWrite(led3Pin, HIGH); digitalWrite(led4Pin, HIGH); digitalWrite(led5Pin, HIGH); digitalWrite(led6Pin, HIGH); ledOn = true; led2On = true; led3On = true; led4On = true; led5On = true; led6On = true; }else if(readString.indexOf("Level10=0") >=0){ //Выключаем светодиод digitalWrite(ledPin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); digitalWrite(led4Pin, LOW); digitalWrite(led5Pin, LOW); digitalWrite(led6Pin, LOW); ledOn = false; led2On = false; led3On = false; led4On = false; led5On = false; led6On = false; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response //client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> "); client.println("<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"MY_IP"/\"></head>"); client.println(F("<body>")); client.println(F("<center><head><title>Управление светом</title></head>")); client.print(F("<input type=button value='Моя комната | ON' onmousedown=location.href='/?Level=1'>")); client.println(F("<input type=button value='Моя комната | OFF' onmousedown=location.href='/?Level=0'><br/><br/>")); client.print(F("<input type=button value='Ванна | ON' onmousedown=location.href='/?Level2=1'>")); client.println(F("<input type=button value='Ванна | OFF' onmousedown=location.href='/?Level2=0'><br/><br/>")); client.print(F("<input type=button value='Туалет | ON' onmousedown=location.href='/?Level3=1'>")); client.println(F("<input type=button value='Туалет | OFF' onmousedown=location.href='/?Level3=0'><br/><br/>")); client.print(F("<input type=button value='Кухня | ON' onmousedown=location.href='/?Level4=1'>")); client.println(F("<input type=button value='Кухня | OFF' onmousedown=location.href='/?Level4=0'><br/><br/>")); client.print(F("<input type=button value='Спальня | ON' onmousedown=location.href='/?Level5=1'>")); client.println(F("<input type=button value='Спальня | OFF' onmousedown=location.href='/?Level5=0'><br/><br/>")); client.print(F("<input type=button value='Коридор | ON' onmousedown=location.href='/?Level6=1'>")); client.println(F("<input type=button value='Коридор | OFF' onmousedown=location.href='/?Level6=0'><br/><br/>")); client.print(F("<input type=button value='ON ALL' onmousedown=location.href='/?Level10=1'>")); client.println(F("<input type=button value='OFF ALL' onmousedown=location.href='/?Level10=0'><br/><br/>")); //client.println("<a href=\"/?Level=1\"\">Turn On Light</a><br />"); //client.println("<a href=\"/?Level=0\"\">Turn Off Light</a><br />"); //client.println("<a href=\"/?Level2=1\"\">Turn On 2 Light</a><br />"); //client.println("<a href=\"/?Level2=0\"\">Turn Off 2 Light</a><br />"); if (ledOn){ client.println("<font size=’5′>Моя комната - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Моя комната - OFF"); client.println("<br></br>"); } if (led2On){ client.println("<font size=’5′>Ванная - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Ванная - OFF"); client.println("<br></br>"); } if (led3On){ client.println("<font size=’5′>Туалет - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Туалет - OFF"); client.println("<br></br>"); } if (led4On){ client.println("<font size=’5′>Кухня - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Кухня - OFF"); client.println("<br></br>"); } if (led5On){ client.println("<font size=’5′>Спальня - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Спальня - OFF"); client.println("<br></br>"); } if (led6On){ client.println("<font size=’5′>Коридор - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Коридор - OFF"); client.println("<br></br>"); } if (led7On){ client.println("<font size=’5′>Преобразователь - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Преобразователь - OFF"); client.println("<br></br>"); } client.println(F("</center></body>")); client.println("</html>"); readString=""; //останавливаем web-client client.stop(); } } } } // часть кода для кнопки, реле и светодиода currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) // Если нажатие (условия для светодиода на пине 6) { ledOn = !ledOn; } lastButton = currentButton; digitalWrite(ledPin, ledOn); // Изменить статус состояния светодиода current2Button = debounce2(last2Button); if (last2Button == LOW && current2Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led2On = !led2On; } last2Button = current2Button; digitalWrite(led2Pin, led2On); // Изменить статус состояния светодиода current3Button = debounce3(last3Button); if (last3Button == LOW && current3Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led3On = !led3On; } last3Button = current3Button; digitalWrite(led3Pin, led3On); // Изменить статус состояния светодиода current4Button = debounce4(last4Button); if (last4Button == LOW && current4Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led4On = !led4On; } last4Button = current4Button; digitalWrite(led4Pin, led4On); // Изменить статус состояния светодиода current5Button = debounce5(last5Button); if (last5Button == LOW && current5Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led5On = !led5On; } last5Button = current5Button; digitalWrite(led5Pin, led5On); // Изменить статус состояния светодиода current6Button = debounce6(last6Button); if (last6Button == LOW && current6Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led6On = !led6On; } last6Button = current6Button; digitalWrite(led6Pin, led6On); // Изменить статус состояния светодиода if (ledOn == true || led2On == true || led3On == true || led4On == true || led5On == true || led6On == true) { digitalWrite(led7Pin, HIGH); led7On = true; } else { //delay(500); digitalWrite(led7Pin, LOW); led7On = false; } }Явных проблем не видно (кроме индусского кода). Я бы таки проверил на простом скетче (без сетевых фокусов) - включается эта же конструкция сама по себе или нет.
Сократил код до такого вида, теперь только первый выход включается при запуске.
// задаем константы const int ledPin = A0; // номер выхода светодиода const int led2Pin = A1; const int led3Pin = A2; const int led4Pin = A3; const int led5Pin = A4; const int led6Pin = A5; const int buttonPin = 2; // номер входа, подключенный к кнопке const int button2Pin = 3; const int button3Pin = 4; const int button4Pin = 5; const int button5Pin = 6; const int button6Pin = 7; // переменные boolean lastButton = LOW; // Переменная для сохранения предыдущего состояния кнопки boolean last2Button = LOW; boolean last3Button = LOW; boolean last4Button = LOW; boolean last5Button = LOW; boolean last6Button = LOW; boolean currentButton = LOW; // Переменная для сохранения текущего состояния кнопки boolean current2Button = LOW; boolean current3Button = LOW; boolean current4Button = LOW; boolean current5Button = LOW; boolean current6Button = LOW; boolean ledOn = false; // Текущее состояние светодиода (включен/выключен) boolean led2On = false; boolean led3On = false; boolean led4On = false; boolean led5On = false; boolean led6On = false; void setup() { // инициализируем пин, подключенный к светодиоду, как выход pinMode(ledPin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); pinMode(led5Pin, OUTPUT); pinMode(led6Pin, OUTPUT); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT); pinMode(button5Pin, INPUT); pinMode(button6Pin, INPUT); digitalWrite(ledPin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); digitalWrite(led4Pin, LOW); digitalWrite(led5Pin, LOW); digitalWrite(led6Pin, LOW); } boolean debounce(boolean last){ boolean current = digitalRead(buttonPin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(buttonPin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce2(boolean last){ boolean current = digitalRead(button2Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button2Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce3(boolean last){ boolean current = digitalRead(button3Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(100); // ждём 5 мс current = digitalRead(button3Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce4(boolean last){ boolean current = digitalRead(button4Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button4Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce5(boolean last){ boolean current = digitalRead(button5Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button5Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } boolean debounce6(boolean last){ boolean current = digitalRead(button6Pin); // Считать состояние кнопки if (last != current) // Если изменилось ... { delay(5); // ждём 5 мс current = digitalRead(button6Pin); // Считываем состояние кнопки return current; // Возвращаем состояние кнопки } } void loop() { // часть кода для кнопки, реле и светодиода currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) // Если нажатие (условия для светодиода на пине 6) { ledOn = !ledOn; } lastButton = currentButton; digitalWrite(ledPin, ledOn); // Изменить статус состояния светодиода current2Button = debounce2(last2Button); if (last2Button == LOW && current2Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led2On = !led2On; } last2Button = current2Button; digitalWrite(led2Pin, led2On); // Изменить статус состояния светодиода current3Button = debounce3(last3Button); if (last3Button == LOW && current3Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led3On = !led3On; } last3Button = current3Button; digitalWrite(led3Pin, led3On); // Изменить статус состояния светодиода current4Button = debounce4(last4Button); if (last4Button == LOW && current4Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led4On = !led4On; } last4Button = current4Button; digitalWrite(led4Pin, led4On); // Изменить статус состояния светодиода current5Button = debounce5(last5Button); if (last5Button == LOW && current5Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led5On = !led5On; } last5Button = current5Button; digitalWrite(led5Pin, led5On); // Изменить статус состояния светодиода current6Button = debounce6(last6Button); if (last6Button == LOW && current6Button == HIGH) // Если нажатие (условия для светодиода на пине 6) { led6On = !led6On; } last6Button = current6Button; digitalWrite(led6Pin, led6On); // Изменить статус состояния светодиода }Сократил код до такого вида, теперь только первый выход включается при запуске.
...
Нашёл скетч с другой обработкой кнопок, переделал его под себя и теперь проблем с самопроизвольным включением нет. Но теперь появилась другая проблема - на веб странице не отображается состояние выходов, всегда пишет - OFF. Всё остальное работает отлично.
#include <Ethernet2.h> #include <SPI.h> int LedPin1 = A0; // Подключаем светодиод к порту 13 int LedPin2 = A1; int LedPin3 = A2; int LedPin4 = A3; int LedPin5 = A4; int LedPin6 = A5; int LedPin7 = 8; int ButPin1 = 2; // Подключаем кнопку к выходу 10 int ButPin2 = 3; int ButPin3 = 4; int ButPin4 = 5; int ButPin5 = 6; int ButPin6 = 7; int flag1 = 0; // флаг состояния int flag2 = 0; int flag3 = 0; int flag4 = 0; int flag5 = 0; int flag6 = 0; int flag7 = 0; String readString = String(30); // объявляем переменную MY_IP со значением 10.36.1.52 #define MY_IP "192.168.1.206" // указываем настройки сетевого интерфейса и порт веб-сервера byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 206); EthernetServer server(80); void setup() { pinMode(LedPin1, OUTPUT); // Инициализируем порт "ledPin" как выходной pinMode(LedPin2, OUTPUT); pinMode(LedPin3, OUTPUT); pinMode(LedPin4, OUTPUT); pinMode(LedPin5, OUTPUT); pinMode(LedPin6, OUTPUT); pinMode(LedPin7, OUTPUT); digitalWrite(LedPin1, LOW); digitalWrite(LedPin2, LOW); digitalWrite(LedPin3, LOW); digitalWrite(LedPin4, LOW); digitalWrite(LedPin5, LOW); digitalWrite(LedPin6, LOW); digitalWrite(LedPin7, LOW); // стартуем сетевой интерфейс Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("new client"); // boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // Serial.write(c); if (readString.length() < 30) { readString.concat( c); } Serial.print( c); if (c == '\n') { if(readString.indexOf("Led_1=1") >=0) { //Включаем светодиод digitalWrite(LedPin1, HIGH); flag1 = 1; }else if(readString.indexOf("Led_1=0") >=0){ //Выключаем светодиод digitalWrite(LedPin1, LOW); flag1 = 0; } if(readString.indexOf("Led_2=1") >=0) { //Включаем светодиод digitalWrite(LedPin2, HIGH); flag2 = 1; }else if(readString.indexOf("Led_2=0") >=0){ //Выключаем светодиод digitalWrite(LedPin2, LOW); flag2 = 0; } if(readString.indexOf("Led_3=1") >=0) { //Включаем светодиод digitalWrite(LedPin3, HIGH); flag3 = 1; }else if(readString.indexOf("Led_3=0") >=0){ //Выключаем светодиод digitalWrite(LedPin3, LOW); flag3 = 0; } if(readString.indexOf("Led_4=1") >=0) { //Включаем светодиод digitalWrite(LedPin4, HIGH); flag4 = 1; }else if(readString.indexOf("Led_4=0") >=0){ //Выключаем светодиод digitalWrite(LedPin4, LOW); flag4 = 0; } if(readString.indexOf("Led_5=1") >=0) { //Включаем светодиод digitalWrite(LedPin5, HIGH); flag5 = 1; }else if(readString.indexOf("Led_5=0") >=0){ //Выключаем светодиод digitalWrite(LedPin5, LOW); flag5 = 0; } if(readString.indexOf("Led_6=1") >=0) { //Включаем светодиод digitalWrite(LedPin6, HIGH); flag6 = 1; }else if(readString.indexOf("Led_6=0") >=0){ //Выключаем светодиод digitalWrite(LedPin6, LOW); flag6 = 0; } if(readString.indexOf("Led_all=1") >=0) { //Включаем светодиод digitalWrite(LedPin1, HIGH); digitalWrite(LedPin2, HIGH); digitalWrite(LedPin3, HIGH); digitalWrite(LedPin4, HIGH); digitalWrite(LedPin5, HIGH); digitalWrite(LedPin6, HIGH); flag1 = 1; flag2 = 1; flag3 = 1; flag4 = 1; flag5 = 1; flag6 = 1; }else if(readString.indexOf("Led_all=0") >=0){ //Выключаем светодиод digitalWrite(LedPin1, LOW); digitalWrite(LedPin2, LOW); digitalWrite(LedPin3, LOW); digitalWrite(LedPin4, LOW); digitalWrite(LedPin5, LOW); digitalWrite(LedPin6, LOW); flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 0; flag5 = 0; flag6 = 0; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response //client.println("Refresh: 5"); // refresh the page automatically every 5 sec client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> "); client.println("<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"MY_IP"/\"></head>"); client.println(F("<body>")); client.println(F("<center><head><title>Управление светом</title></head>")); client.print(F("<input type=button value='Моя комната | ON' onmousedown=location.href='/?Led_1=1'>")); client.println(F("<input type=button value='Моя комната | OFF' onmousedown=location.href='/?Led_1=0'><br/><br/>")); client.print(F("<input type=button value='Ванна | ON' onmousedown=location.href='/?Led_2=1'>")); client.println(F("<input type=button value='Ванна | OFF' onmousedown=location.href='/?Led_2=0'><br/><br/>")); client.print(F("<input type=button value='Туалет | ON' onmousedown=location.href='/?Led_3=1'>")); client.println(F("<input type=button value='Туалет | OFF' onmousedown=location.href='/?Led_3=0'><br/><br/>")); client.print(F("<input type=button value='Кухня | ON' onmousedown=location.href='/?Led_4=1'>")); client.println(F("<input type=button value='Кухня | OFF' onmousedown=location.href='/?Led_4=0'><br/><br/>")); client.print(F("<input type=button value='Спальня | ON' onmousedown=location.href='/?Led_5=1'>")); client.println(F("<input type=button value='Спальня | OFF' onmousedown=location.href='/?Led_5=0'><br/><br/>")); client.print(F("<input type=button value='Коридор | ON' onmousedown=location.href='/?Led_6=1'>")); client.println(F("<input type=button value='Коридор | OFF' onmousedown=location.href='/?Led_6=0'><br/><br/>")); client.print(F("<input type=button value='ON ALL' onmousedown=location.href='/?Led_all=1'>")); client.println(F("<input type=button value='OFF ALL' onmousedown=location.href='/?Led_all=0'><br/><br/>")); if (flag1){ client.println("<font size=’5′>Моя комната - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Моя комната - OFF"); client.println("<br></br>"); } if (flag2){ client.println("<font size=’5′>Ванная - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Ванная - OFF"); client.println("<br></br>"); } if (flag3){ client.println("<font size=’5′>Туалет - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Туалет - OFF"); client.println("<br></br>"); } if (flag4){ client.println("<font size=’5′>Кухня - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Кухня - OFF"); client.println("<br></br>"); } if (flag5){ client.println("<font size=’5′>Спальня - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Спальня - OFF"); client.println("<br></br>"); } if (flag6){ client.println("<font size=’5′>Коридор - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Коридор - OFF"); client.println("<br></br>"); } if (flag7){ client.println("<font size=’5′>Преобразователь - ON."); client.println("<br></br>"); }else{ client.println("<font size=’5′>Преобразователь - OFF"); client.println("<br></br>"); } client.println(F("</center></body>")); client.println("</html>"); readString=""; //останавливаем web-client client.stop(); } } } } if(digitalRead(ButPin1) == HIGH && flag1 == 0) { delay(50); digitalWrite(LedPin1, !digitalRead(LedPin1)); flag1 = 1; } if(digitalRead(ButPin1) == LOW && flag1 == 1) { delay(50); flag1 = 0; } if(digitalRead(ButPin2) == HIGH && flag2 == 0) { delay(50); digitalWrite(LedPin2, !digitalRead(LedPin2)); flag2 = 1; } if(digitalRead(ButPin2) == LOW && flag2 == 1) { delay(50); flag2 = 0; } if(digitalRead(ButPin3) == HIGH && flag3 == 0) { delay(50); digitalWrite(LedPin3, !digitalRead(LedPin3)); flag3 = 1; } if(digitalRead(ButPin3) == LOW && flag3 == 1) { delay(50); flag3 = 0; } if(digitalRead(ButPin4) == HIGH && flag4 == 0) { delay(50); digitalWrite(LedPin4, !digitalRead(LedPin4)); flag4 = 1; } if(digitalRead(ButPin4) == LOW && flag4 == 1) { delay(50); flag4 = 0; } if(digitalRead(ButPin5) == HIGH && flag5 == 0) { delay(50); digitalWrite(LedPin5, !digitalRead(LedPin5)); flag5 = 1; } if(digitalRead(ButPin5) == LOW && flag5 == 1) { delay(50); flag5 = 0; } if(digitalRead(ButPin6) == HIGH && flag6 == 0) { delay(50); digitalWrite(LedPin6, !digitalRead(LedPin6)); flag6 = 1; } if(digitalRead(ButPin6) == LOW && flag6 == 1) { delay(50); flag6 = 0; } if (flag1 == 1 || flag2 == 1 || flag3 == 1 || flag4 == 1 || flag5 == 1 || flag6 == 1) { digitalWrite(LedPin7, HIGH); flag7 = 1; } else { digitalWrite(LedPin7, LOW); flag7 = 0; } }Извиняюсь, уже исправил.