Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Ethernet2.h>
- #include <SPI.h>
- // задаем константы
- const int ledPin = A2; // номер выхода светодиода
- const int buttonPin = 2; // номер входа, подключенный к кнопке
- const int Relay1 = 5; // к 5-ому пину подключено IN1 реле
- // переменные
- boolean lastButton = LOW; // Переменная для сохранения предыдущего состояния кнопки
- boolean currentButton = LOW; // Переменная для сохранения текущего состояния кнопки
- boolean ledOn = false; // Текущее состояние светодиода (включен/выключен)
- boolean Relay1On = true; // Текущее состояние реле
- 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" при включении
- * ардуины будет происходить кратковременное переключение реле,
- * а значит кратковременно подастся питание, что нам категорически
- * не надо!
- */
- digitalWrite(Relay1, HIGH);
- // инициализируем пин, подключенный к светодиоду, как выход
- 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' && currentLineIsBlank) {
- if (c == '\n') {
- //Проверяем включили ли реле и светодиод?
- //Level=1 - включен
- //Level=0 - выключен
- if(readString.indexOf("Level=1") >=0) {
- //Включаем реле
- digitalWrite(Relay1, LOW);
- Relay1On = false;
- //Включаем светодиод
- digitalWrite(ledPin, HIGH);
- ledOn = true;
- }else if(readString.indexOf("Level=0") >=0){
- //Выключаем реле
- digitalWrite(Relay1, HIGH);
- Relay1On = true;
- //Выключаем светодиод
- 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("<!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>Relay Control</title></head>"));
- if (Relay1On){
- client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить");
- client.println("<input type=radio name=Level value=0>Выключить");
- client.println("<input type=submit value=Применить></form>");
- client.println("<font size=’5′>Состояние реле: ");
- client.println("<font size=’5′>Выкл.");
- client.println("<br></br>");
- }else{
- client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить");
- client.println("<input type=radio name=Level value=0 CHECKED>Выключить");
- client.println("<input type=submit value=Применить></form>");
- client.println("<font size=’5′>Состояние реле: ");
- client.println("<font size=’5′>Вкл");
- client.println("<br></br>");
- }
- //client.print(F("<input type=button value='Main Light ON' onmousedown=location.href='/?LED_on'>"));
- //client.println(F("<input type=button value='Main Light OFF' onmousedown=location.href='/?LED_off'><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(F("</center></body>"));
- client.println("</html>");
- 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); // Изменить статус состояния реле
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement