Передача состояния порта по UART
- Войдите на сайт для отправки комментариев
Добрый день
Придесловие
Попалось мне в руки китайское устройство http://www.nitwo.com/sell-wifi_8do_8di_module_8relay_220v_5a_network_ethernet_wifi_control_android_mobile-1876150.html
Железо Atmega32A WIFI H-link RM04 на входах и выходах стоят оптроны PORTA INPUT PORTD OTPUT
Управляется только через свою китайскую программу. Захотел подключить его к системе умного дома
Написал прошивку для своих целей
Обработка кнопок каждая кнопка включает/выключает свое реле
Работа с wifi по статье забугорного товарища http://83.56.32.125/wifirm04.html
Так вот все работает отлично хочу добавить обратную связь т.е. Контролер умного дома через инет опрашивает железяку каждые пять минут и должен получить состояние реле включено или выключено
Кусок кода По hf,jnt WIFI
boolean has_request = false;
String in = "";
if (Serial.available()) {
in = "";
while (true) { // should add time out here
while (Serial.available() == false) {}
in += (char)(Serial.read());
if (in.endsWith("\r\n\r\n")) {
has_request = true; break;
}
}
}
if (has_request) {
int i1 = in.indexOf("GET /relay?f="), i2;
if (i1 != -1) {
i2 = in.indexOf(" ", i1+13);
f = in.substring(i1+13, i2).toInt();
}
Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close");
String sr = "<!DOCTYPE HTML >\n"; //??NO QUITAR ESPACIOS EN BLANCO!!
Serial.print("Content-Length: ");
Serial.print(sr.length());
Serial.print("\r\n\r\n");
if (f==10) { Serial.println("Реле1: Выключено"); }
if (f==11) { Serial.println("Реле1: Включено"); }
if (f==12) { Serial.println(relayON1, DEC); }
Serial.print(sr);
has_request = false;
}
switch (f){
case 10:
digitalWrite(Relay1, HIGH);
relayON1=0;
break;
case 11:
digitalWrite(Relay1, LOW);
relayON1=1;
break;
f=0;
}
Загвоздка в том что команда if (f==12) { Serial.println(relayON1, DEC); } выдает всегда 1
relayON1 - integer флаг включения реле используемый при управлении кнопка и через GET Запросы
Так же пробовал if (f==12) { Serial.println(digitalRead(Relay1), DEC); } так же всегда 1
В чем может быть проблема?
Что выводится в Сериал при f=10 или f=11?
При f =10 выводится Реле1: Выключено
При f =11 выводится Реле1: Включено
При f =12 выводится "1" - если даже реле выключено
Как и где описаны переменные relayON1 и f?
Здесь ещё в конце switch "странная" конструкция f = 0; хоть это и не особенно важно, но все таки после break напрашивается закрывающаяся фигурная скобка.
UPD: и да, на какой Ардуине этот скетч выполняется?
Как и где описаны переменные relayON1 и f?
Здесь ещё в конце switch "странная" конструкция f = 0; хоть это и не особенно важно, но все таки после break напрашивается закрывающаяся фигурная скобка.
UPD: и да, на какой Ардуине этот скетч выполняется?
relayON1 - relayON8 описываются в самом начале до процедуры setup()
f описывается между setup и loop это не важно
По поводу f=0 из теории С конструкця swich case любое действие после break будет выполняться код
По поводу платформы я писал что это китайская железяка на атмега32а для того что б подружить ее с Arduino IDE я прописал в файл боард
в файл варинт написал следующие
#ifndef Pins_Arduino_h #define Pins_Arduino_h #include <avr/pgmspace.h> static const uint8_t SDA = 20; static const uint8_t SCL = 19; static const uint8_t MISO = 2; static const uint8_t MOSI = 1; static const uint8_t SCK = 3; static const uint8_t SS = 44; #ifdef ARDUINO_MAIN #define PA 1 #define PB 2 #define PC 3 #define PD 4 const uint16_t PROGMEM port_to_mode_PGM[5] = { NOT_A_PORT, (uint16_t) &DDRA, (uint16_t) &DDRB, (uint16_t) &DDRC, (uint16_t) &DDRD, }; const uint16_t PROGMEM port_to_output_PGM[5] = { NOT_A_PORT, (uint16_t) &PORTA, (uint16_t) &PORTB, (uint16_t) &PORTC, (uint16_t) &PORTD, }; const uint16_t PROGMEM port_to_input_PGM[5] = { NOT_A_PIN, (uint16_t) &PINA, (uint16_t) &PINB, (uint16_t) &PINC, (uint16_t) &PIND, }; const uint8_t PROGMEM digital_pin_to_port_PGM[32] = { PB, // PB0 ** D0 PB, // PB1 ** D1 PB, // PB2 ** D2 PB, // PB3 ** D3 PB, // PB4 ** D4 PB, // PB5 ** D5 PB, // PB6 ** D6 PB, // PB7 ** D7 PD, // PD0 ** D8 PD, // PD1 ** D9 PD, // PD2 ** D10 PD, // PD3 ** D11 PD, // PD4 ** D12 PD, // PD5 ** D13 PD, // PD6 ** D14 PD, // PD7 ** D15 PC, // PC0 ** D16 PC, // PC1 ** D17 PC, // PC2 ** D18 PC, // PC3 ** D19 PC, // PC4 ** D20 PC, // PC5 ** D21 PC, // PC6 ** D22 PC, // PC7 ** D23 PA, // PA7 ** A0 D24 PA, // PA6 ** A1 D25 PA, // PA5 ** A2 D26 PA, // PA4 ** A3 D27 PA, // PA3 ** A4 D28 PA, // PA2 ** A5 D29 PA, // PA1 ** A6 D30 PA, // PA0 ** A7 D31 }; const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[32] = { _BV(0), // PB0 ** D0 _BV(1), // PB1 ** D1 _BV(2), // PB2 ** D2 _BV(3), // PB3 ** D3 _BV(4), // PB4 ** D4 _BV(5), // PB5 ** D5 _BV(6), // PB6 ** D6 _BV(7), // PB7 ** D7 _BV(0), // PD0 ** D8 _BV(1), // PD1 ** D9 _BV(2), // PD2 ** D10 _BV(3), // PD3 ** D11 _BV(4), // PD4 ** D12 _BV(5), // PD5 ** D13 _BV(6), // PD6 ** D14 _BV(7), // PD7 ** D15 _BV(0), // PC0 ** D16 _BV(1), // PC1 ** D17 _BV(2), // PC2 ** D18 _BV(3), // PC3 ** D19 _BV(4), // PC4 ** D20 _BV(5), // PC5 ** D21 _BV(6), // PC6 ** D22 _BV(7), // PC7 ** D23 _BV(7), // PA7 ** A0 D24 _BV(6), // PA6 ** A1 D25 _BV(5), // PA5 ** A2 D26 _BV(4), // PA4 ** A3 D27 _BV(3), // PA3 ** A4 D28 _BV(2), // PA2 ** A5 D29 _BV(1), // PA1 ** A6 D30 _BV(0), // PA0 ** A7 D31 }; const uint8_t PROGMEM digital_pin_to_timer_PGM[32] = { NOT_ON_TIMER, // PB0 ** D0 NOT_ON_TIMER, // PB1 ** D1 NOT_ON_TIMER, // PB2 ** D2 TIMER0A, // PB3 ** D3 NOT_ON_TIMER, // PB4 ** D4 NOT_ON_TIMER, // PB5 ** D5 NOT_ON_TIMER, // PB6 ** D6 NOT_ON_TIMER, // PB7 ** D7 NOT_ON_TIMER, // PD0 ** D8 NOT_ON_TIMER, // PD1 ** D9 NOT_ON_TIMER, // PD2 ** D10 NOT_ON_TIMER, // PD3 ** D11 TIMER1B, // PD4 ** D12 TIMER1A, // PD5 ** D13 NOT_ON_TIMER, // PD6 ** D14 TIMER2, // PD7 ** D15 NOT_ON_TIMER, // PC0 ** D16 NOT_ON_TIMER, // PC1 ** D17 NOT_ON_TIMER, // PC2 ** D18 NOT_ON_TIMER, // PC3 ** D19 NOT_ON_TIMER, // PC4 ** D20 NOT_ON_TIMER, // PC5 ** D21 NOT_ON_TIMER, // PC6 ** D22 NOT_ON_TIMER, // PC7 ** D23 NOT_ON_TIMER, // PA7 ** A0 D24 NOT_ON_TIMER, // PA6 ** A1 D25 NOT_ON_TIMER, // PA5 ** A2 D26 NOT_ON_TIMER, // PA4 ** A3 D27 NOT_ON_TIMER, // PA3 ** A4 D28 NOT_ON_TIMER, // PA2 ** A5 D29 NOT_ON_TIMER, // PA1 ** A6 D30 NOT_ON_TIMER, // PA0 ** A7 D31 }; #endifНу и сам скетч кривой косой секретов нет , но работающий в принципе, могу проверить работу на ардуино нано
/* Реле 8 - PA7 Arduino D24 Реле 7 - PA6 Arduino D25 Реле 6 - PA5 Arduino D26 Реле 5 - PA4 Arduino D27 Реле 4 - PA0 Arduino D31 Реле 3 - PA1 Arduino D30 Реле 2 - PA2 Arduino D29 Реле 1 - PA3 Arduino D28 */ int Relay4 = 31; int Relay3 = 30; int Relay2 = 29; int Relay1 = 28; int Relay5 = 27; int Relay6 = 26; int Relay7 = 25; int Relay8 = 24; int SW1 =13; int SW2 =15; int SW3 =19; int SW4 =18; int SW5 =20; int SW6 =21; int SW7 =22; int SW8 = 23; int relayON1 = 0; int relayON2 = 0; int relayON3 = 0; int relayON4 = 0; int relayON5 = 0; int relayON6 = 0; int relayON7 = 0; int relayON8 = 0; void setup() { pinMode(Relay1, OUTPUT); //Rele 1 pinMode(Relay2, OUTPUT); //Rele 2 pinMode(Relay3, OUTPUT); //Rele 3 pinMode(Relay4, OUTPUT); //Rele 4 pinMode(Relay5, OUTPUT); //Rele 5 pinMode(Relay6, OUTPUT); //Rele 6 pinMode(Relay7, OUTPUT); //Rele 7 pinMode(Relay8, OUTPUT); //Rele 8 pinMode(SW1,INPUT); pinMode(SW2,INPUT); pinMode(SW3,INPUT); pinMode(SW4,INPUT); pinMode(SW5,INPUT); pinMode(SW6,INPUT); pinMode(SW7,INPUT); pinMode(SW8,INPUT); PORTA=0xFF; UBRRH = 0; UBRRL = 16; //51 скорость обмена 9600 бод 8000000/(16*9600) – 1 //разр. прерыв при приеме, разр приема, разр передачи. UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //обращаемся к регистру UCSRS, размер слова – 8 бит UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } int f = 0; void loop() { ///////////////////////////////////////////////////////////////////// if(digitalRead(SW1)== HIGH && relayON1 == 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON1=1;} if(digitalRead(SW1)== LOW && relayON1 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay1,!digitalRead(Relay1)); delay(500); relayON1=0;} /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW2)== HIGH && relayON2== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON2=1;} if(digitalRead(SW2)== LOW && relayON2 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay2,!digitalRead(Relay2)); delay(500); relayON2=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW3)== HIGH && relayON3== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON3=1;} if(digitalRead(SW3)== LOW && relayON3 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay3,!digitalRead(Relay3)); delay(500); relayON3=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW4)== HIGH && relayON4== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON4=1;} if(digitalRead(SW4)== LOW && relayON4 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay4,!digitalRead(Relay4)); delay(500); relayON4=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW5)== HIGH && relayON5== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON5=1;} if(digitalRead(SW5)== LOW && relayON5 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay5,!digitalRead(Relay5)); delay(500); relayON5=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW6)== HIGH && relayON6== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON6=1;} if(digitalRead(SW6)== LOW && relayON6 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay6,!digitalRead(Relay6)); delay(500); relayON6=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW7)== HIGH && relayON7== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON7=1;} if(digitalRead(SW7)== LOW && relayON7 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay7,!digitalRead(Relay7)); delay(500); relayON7=0;} ////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// if(digitalRead(SW8)== HIGH && relayON8== 0)//если кнопка нажата и перемення flag равна 0 , то ... {relayON8=1;} if(digitalRead(SW8)== LOW && relayON8 == 1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то .. { digitalWrite(Relay8,!digitalRead(Relay8)); delay(500); relayON8=0;} ////////////////////////////////////////////////////////////////////////////////// boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { // should add time out here while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n\r\n")) { has_request = true; break; } } } if (has_request) { int i1 = in.indexOf("GET /relay?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+13); f = in.substring(i1+13, i2).toInt(); } Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close"); String sr = "<!DOCTYPE HTML >\n"; //??NO QUITAR ESPACIOS EN BLANCO!! Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); if (f==10) { Serial.println("Реле1: Выключено"); } if (f==11) { Serial.println("Реле1: Включено"); } if (f==12) { Serial.println(relayON1, DEC); } if (f==20) { Serial.println("Реле2: Выключено"); } if (f==21) { Serial.println("Реле2: Включено"); } if (f==22) { Serial.println(relayON2, DEC); } if (f==30) { Serial.println("Реле3: Выключено"); } if (f==31) { Serial.println("Реле3: Включено"); } if (f==32) { Serial.println(relayON3, DEC); } if (f==40) { Serial.println("Реле4: Выключено"); } if (f==41) { Serial.println("Реле4: Включено"); } if (f==42) { Serial.println(relayON4, DEC); } if (f==50) { Serial.println("Реле5: Выключено"); } if (f==51) { Serial.println("Реле5: Включено"); } if (f==52) { Serial.println(relayON5, DEC); } if (f==60) { Serial.println("Реле6: Выключено"); } if (f==61) { Serial.println("Реле6: Включено"); } if (f==62) { Serial.println(relayON6, DEC); } if (f==70) { Serial.println("Реле7: Выключено"); } if (f==71) { Serial.println("Реле7: Включено"); } if (f==72) { Serial.println(relayON7, DEC); } if (f==80) { Serial.println("Реле8: Выключено"); } if (f==81) { Serial.println("Реле8: Включено"); } if (f==82) { Serial.println(relayON8, DEC); } if (f==90) { Serial.println("Выключено Все"); } if (f==91) { Serial.println("Включено Все"); } Serial.print(sr); has_request = false; } switch (f){ case 10: digitalWrite(Relay1, HIGH); relayON1=0; break; case 11: digitalWrite(Relay1, LOW); relayON1=1; break; case 20: digitalWrite(Relay2, HIGH); relayON2=0; break; case 21: digitalWrite(Relay2, LOW); relayON2=1; break; case 30: digitalWrite(Relay3, HIGH); relayON3=0; break; case 31: digitalWrite(Relay3, LOW); relayON3=1; break; case 40: digitalWrite(Relay4, HIGH); relayON4=0; break; case 41: digitalWrite(Relay4, LOW); relayON4=1; break; case 50: digitalWrite(Relay5, HIGH); relayON5=0; break; case 51: digitalWrite(Relay5, LOW); relayON5=1; break; case 60: digitalWrite(Relay6, HIGH); relayON6=0; break; case 61: digitalWrite(Relay6, LOW); relayON6=1; break; case 70: digitalWrite(Relay7, HIGH); relayON7=0; break; case 71: digitalWrite(Relay7, LOW); relayON7=1; break; case 80: digitalWrite(Relay8, HIGH); relayON8=0; break; case 81: digitalWrite(Relay8, LOW); relayON8=1; break; case 90: digitalWrite(Relay1, HIGH); relayON8=1; digitalWrite(Relay2, HIGH); relayON2=0; digitalWrite(Relay3, HIGH); relayON3=0; digitalWrite(Relay4, HIGH); relayON4=0; digitalWrite(Relay5, HIGH); relayON5=0; digitalWrite(Relay6, HIGH); relayON6=0; digitalWrite(Relay7, HIGH); relayON7=0; digitalWrite(Relay8, HIGH); relayON8=0; break; case 91: digitalWrite(Relay1, LOW); relayON1=1; digitalWrite(Relay2, LOW); relayON2=1; digitalWrite(Relay3, LOW); relayON3=1; digitalWrite(Relay4, LOW); relayON4=1; digitalWrite(Relay5, LOW); relayON5=1; digitalWrite(Relay6, LOW); relayON6=1; digitalWrite(Relay7, LOW); relayON7=1; digitalWrite(Relay8, LOW); relayON8=1; break; f=0; } } сильно не пинайте плизСтроки 71-75 говорят о том, что если кнопка не нажата, а relayON1 =1, то оно должно сброситься в 0.
Здесь нет проверки на дребезг кнопок, значит нажатие кнопок будет звенеть (многократно срабатывать), если нажать или отпустить кнопку.
Про switch, не проще сбросить f в 0 после switch, зачем такая сложная конструкция?
Я бы порекомендовал закрыть код кнопок для отладки, потому что он может только помешать отладке.
Могу только порекомендовать посмотреть все точки, где relayON1 устанавливается в 1, себе лучше вывести на монитор.
Переписал вот таким образом но возникла проблема другая если реле вкл/выкл GET запросом то при нажатии кномки оно срабатывает и возвращается в положение последней команды GET запроса
Реле 8 - PA7 Arduino D24 Реле 7 - PA6 Arduino D25 Реле 6 - PA5 Arduino D26 Реле 5 - PA4 Arduino D27 Реле 4 - PA0 Arduino D31 Реле 3 - PA1 Arduino D30 Реле 2 - PA2 Arduino D29 Реле 1 - PA3 Arduino D28 */ int Relay4 = 31; int Relay3 = 30; int Relay2 = 29; int Relay1 = 28; int Relay5 = 27; int Relay6 = 26; int Relay7 = 25; int Relay8 = 24; int SW1 =13; int SW2 =15; int SW3 =19; int SW4 =18; int SW5 =20; int SW6 =21; int SW7 =22; int SW8 = 23; int relayON1 = 0; int relayON2 = 0; int relayON3 = 0; int relayON4 = 0; int relayON5 = 0; int relayON6 = 0; int relayON7 = 0; int relayON8 = 0; void setup() { pinMode(Relay1, OUTPUT); //Rele 1 pinMode(Relay2, OUTPUT); //Rele 2 pinMode(Relay3, OUTPUT); //Rele 3 pinMode(Relay4, OUTPUT); //Rele 4 pinMode(Relay5, OUTPUT); //Rele 5 pinMode(Relay6, OUTPUT); //Rele 6 pinMode(Relay7, OUTPUT); //Rele 7 pinMode(Relay8, OUTPUT); //Rele 8 pinMode(SW1,INPUT_PULLUP); pinMode(SW2,INPUT_PULLUP); pinMode(SW3,INPUT); pinMode(SW4,INPUT); pinMode(SW5,INPUT); pinMode(SW6,INPUT); pinMode(SW7,INPUT); pinMode(SW8,INPUT); PORTA=0xFF; UBRRH = 0; UBRRL = 16; //51 скорость обмена 9600 бод 8000000/(16*9600) – 1 //разр. прерыв при приеме, разр приема, разр передачи. UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //обращаемся к регистру UCSRS, размер слова – 8 бит UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } int f = 0; void loop() { if(digitalRead(SW1) == LOW) // если кнопка нажата { digitalWrite(Relay1, !digitalRead(Relay1)); relayON1=!relayON1; delay(500); } if(digitalRead(SW2) == LOW) // если кнопка нажата { digitalWrite(Relay2, !digitalRead(Relay2)); // то переключаем состояние LedPin relayON2=!relayON2; delay(500); } if(digitalRead(SW3) == LOW) // если кнопка нажата { digitalWrite(Relay3, !digitalRead(Relay3)); // то переключаем состояние LedPin relayON3=!relayON3; delay(500); } if(digitalRead(SW4) == LOW) // если кнопка нажата { digitalWrite(Relay4, !digitalRead(Relay4)); // то переключаем состояние LedPin relayON4=!relayON4; delay(500); } if(digitalRead(SW5) == LOW) // если кнопка нажата { digitalWrite(Relay5, !digitalRead(Relay5)); // то переключаем состояние LedPin relayON5=!relayON5; delay(500); } if(digitalRead(SW6) == LOW) // если кнопка нажата { digitalWrite(Relay6, !digitalRead(Relay6)); // то переключаем состояние LedPin relayON6=!relayON6; delay(500); } if(digitalRead(SW7) == LOW) // если кнопка нажата { digitalWrite(Relay7, !digitalRead(Relay7)); // то переключаем состояние LedPin relayON7=!relayON7; delay(500); } if(digitalRead(SW8) == LOW) // если кнопка нажата { digitalWrite(Relay8, !digitalRead(Relay8)); // то переключаем состояние LedPin relayON8=!relayON8; delay(500); } boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { // should add time out here while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n\r\n")) { has_request = true; break; } } } if (has_request) { int i1 = in.indexOf("GET /relay?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+13); f = in.substring(i1+13, i2).toInt(); } Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close"); String sr = "<!DOCTYPE HTML >\n"; //??NO QUITAR ESPACIOS EN BLANCO!! Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); if (f==10) { Serial.println("Реле1: Выключено"); } if (f==11) { Serial.println("Реле1: Включено"); } if (f==12) {Serial.println(relayON1, DEC); } if (f==20) { Serial.println("Реле2: Выключено"); } if (f==21) { Serial.println("Реле2: Включено"); } if (f==22) {Serial.println(relayON2, DEC); } if (f==30) { Serial.println("Реле3: Выключено"); } if (f==31) { Serial.println("Реле3: Включено"); } if (f==32) {Serial.println(relayON3, DEC); } if (f==40) { Serial.println("Реле4: Выключено"); } if (f==41) { Serial.println("Реле4: Включено"); } if (f==42) {Serial.println(relayON4, DEC); } if (f==50) { Serial.println("Реле5: Выключено"); } if (f==51) { Serial.println("Реле5: Включено"); } if (f==52) {Serial.println(relayON5, DEC); } if (f==60) { Serial.println("Реле6: Выключено"); } if (f==61) { Serial.println("Реле6: Включено"); } if (f==62) {Serial.println(relayON6, DEC); } if (f==70) { Serial.println("Реле7: Выключено"); } if (f==71) { Serial.println("Реле7: Включено"); } if (f==72) {Serial.println(relayON7, DEC); } if (f==80) { Serial.println("Реле8: Выключено"); } if (f==81) { Serial.println("Реле8: Включено"); } if (f==82) {Serial.println(relayON8, DEC); } if (f==90) { Serial.println("Выключено Все"); } if (f==91) { Serial.println("Включено Все"); } Serial.print(sr); has_request = false; } switch (f){ case 10: digitalWrite(Relay1, HIGH); relayON1=0; break; case 11: digitalWrite(Relay1, LOW); relayON1=1; break; case 20: digitalWrite(Relay2, HIGH); relayON2=0; break; case 21: digitalWrite(Relay2, LOW); relayON2=1; break; case 30: digitalWrite(Relay3, HIGH); relayON3=0; break; case 31: digitalWrite(Relay3, LOW); relayON3=1; break; case 40: digitalWrite(Relay4, HIGH); relayON4=0; break; case 41: digitalWrite(Relay4, LOW); relayON4=1; break; case 50: digitalWrite(Relay5, HIGH); relayON5=0; break; case 51: digitalWrite(Relay5, LOW); relayON5=1; break; case 60: digitalWrite(Relay6, HIGH); relayON6=0; break; case 61: digitalWrite(Relay6, LOW); relayON6=1; break; case 70: digitalWrite(Relay7, HIGH); relayON7=0; break; case 71: digitalWrite(Relay7, LOW); relayON7=1; break; case 80: digitalWrite(Relay8, HIGH); relayON8=0; break; case 81: digitalWrite(Relay8, LOW); relayON8=1; break; case 90: digitalWrite(Relay1, HIGH); relayON8=1; digitalWrite(Relay2, HIGH); relayON2=0; digitalWrite(Relay3, HIGH); relayON3=0; digitalWrite(Relay4, HIGH); relayON4=0; digitalWrite(Relay5, HIGH); relayON5=0; digitalWrite(Relay6, HIGH); relayON6=0; digitalWrite(Relay7, HIGH); relayON7=0; digitalWrite(Relay8, HIGH); relayON8=0; break; case 91: digitalWrite(Relay1, LOW); relayON1=1; digitalWrite(Relay2, LOW); relayON2=1; digitalWrite(Relay3, LOW); relayON3=1; digitalWrite(Relay4, LOW); relayON4=1; digitalWrite(Relay5, LOW); relayON5=1; digitalWrite(Relay6, LOW); relayON6=1; digitalWrite(Relay7, LOW); relayON7=1; digitalWrite(Relay8, LOW); relayON8=1; break; f=0; } }