#include #include "IRremote.h" IRrecv irrecv(7); // Указываем пин, к которому подключен ИК-приемник decode_results results; // строка для ИК-приёма // задаем константы const int ledPin = 6; // номер выхода светодиода const int buttonPin = 2; // номер входа, подключенный к кнопке const int Relay1 = 5; // к 5-ому пину подключено IN1 реле // переменные boolean lastButton = LOW; // Переменная для сохранения предыдущего состояния кнопки boolean currentButton = LOW; // Переменная для сохранения текущего состояния кнопки boolean ledOn = false; // Текущее состояние светодиода (включен/выключен) boolean Relay1On = false; // Текущее состояние реле String readString = String(30); // объявляем переменную MY_IP со значением 10.36.1.52 - это IP-адрес назначаемый сетевому модулю Arduino #define MY_IP "10.36.1.52" // указываем настройки сетевого интерфейса и порт веб-сервера // mac - это mac-адрес назначаемый сетевому модулю Arduino byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // в IPAddress ещё раз указываем IP-адрес IPAddress ip(10, 36, 1, 52); EthernetServer server(80); void setup() { delay(500); // Запускаем прием с ИК irrecv.enableIRIn(); /* * без строки "digitalWrite(Relay1, LOW);" перед "pinMode" при включении * ардуины будет происходить кратковременное переключение реле, * а значит кратковременно подастся питание, что нам категорически * не надо! */ digitalWrite(Relay1, LOW); // инициализируем пин, подключенный к светодиоду, как выход pinMode(ledPin, OUTPUT); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); // инициализируем пин, подключенный к реле, как выход pinMode(Relay1, OUTPUT); // стартуем сетевой интерфейс 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; // Возвращаем состояние кнопки } } 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') { //Проверяем включили ли реле и светодиод? //Level=1 - включен //Level=0 - выключен if(readString.indexOf("Level=1") >=0) { //Включаем реле digitalWrite(Relay1, HIGH); Relay1On = true; //Включаем светодиод digitalWrite(ledPin, HIGH); ledOn = true; }else if(readString.indexOf("Level=0") >=0){ //Выключаем реле digitalWrite(Relay1, LOW); Relay1On = false; //Выключаем светодиод digitalWrite(ledPin, LOW); ledOn = 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(""); client.println(""); client.println(" "); client.println(""); client.println(F("")); client.println(F("
Relay Control")); if (Relay1On){ client.println("
"); client.println("Включить"); client.println("Выключить"); client.println(""); client.println("
"); client.println("Состояние реле: "); client.println("Вкл."); client.println("

"); }else{ client.println("
"); client.println("Включить"); client.println("Выключить"); client.println(""); client.println("
"); client.println("Состояние реле: "); client.println("Выкл"); client.println("

"); } //client.print(F("")); //client.println(F("

")); client.println("Turn On Light
"); client.println("Turn Off Light
"); client.println(F("
")); client.println(""); readString=""; //останавливаем web-client client.stop(); } } } } // часть кода для кнопки, реле и светодиода currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) // Если нажатие (условия для светодиода на пине 6) { ledOn = !ledOn; } if (lastButton == LOW && currentButton == HIGH) // Если нажатие (условие для реле) { Relay1On = !Relay1On; } lastButton = currentButton; digitalWrite(ledPin, ledOn); // Изменить статус состояния светодиода digitalWrite(Relay1, Relay1On); // Изменить статус состояния реле // часть кода для ИК, реле и светодиода if (irrecv.decode(&results)) { int value = results.value; Serial.println(value, HEX); /* * мы знаем, что у цифры 2 значение сигнала 20DF48B7 */ if(value == 0x48B7)// Если нажата кнопка "2" { ledOn = !ledOn; Relay1On = !Relay1On; } irrecv.resume(); } }