Помогите новичку

CapsLock
Offline
Зарегистрирован: 10.03.2017

привет, помогите плиз, проблема такая: Написал скетч с html для управления реле с веб интерфейса по локальной сети. мне нужно чтобы реле замыкался только при нажатии на кнопку, а реле срабатывает даже при обновлении страницы. 

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
int status=0;
IPAddress ip(172, 16, 11, 250);
EthernetServer server(80);
String HTTP_req;

void setup()
{
    digitalWrite(9, HIGH);
    Ethernet.begin(mac, ip);
    server.begin();
    Serial.begin(9600);
    pinMode(9, OUTPUT);
}

void loop()
{
    EthernetClient client = server.available();

    if (client) {
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
                HTTP_req += c;
                if (c == '\n' && currentLineIsBlank) {
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    client.println("<!DOCTYPE html>");
                    client.println("<head>");
                    client.println("<style>");
                    client.println(".button {");
                    client.println(" display: inline-block;");
                    client.println(" padding: 15px 55px;");
                    client.println(" font-size: 50px;");
                    client.println("cursor: pointer;");
                    client.println("text-align: center;");
                    client.println("text-decoration: none;");
                    client.println("outline: none;");
                    client.println(" color: #fff;");
                    client.println(" background-color: #4CAF50;");
                    client.println(" border: none;");
                    client.println(" border-radius: 15px;");
                    client.println("box-shadow: 0 9px #999;");
                    client.println("margin-left: 80px;");
                    client.println("}");
                    client.println(".button:hover {background-color: #3e8e41}");
                    client.println(".button:active {");
                    client.println(" background-color: #3e8e41;");
                    client.println(" box-shadow: 0 5px #666;");
                    client.println(" transform: translateY(4px);");
                    client.println("}");
                    client.println("</style>");
                    client.println("<meta charset='utf-8'>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h2> Gapyny açmak üçin düwmä basyň</h2>");
                    client.println("<form action='' method='get'>");
                    //client.println("<input type='hidden' value='ach' name='command'>");
                    client.println ("<button type='submit' class='button' value='achbutton' name='hello'>AÇ</button>");
                    client.println("</form>");
                    client.println("</body>");
                    client.println("</html>");

                    int x = HTTP_req.indexOf("hello=achbutton");
                    if(x!=-1){
                      if(status==0){
                        Serial.println("Open The Damn Door");
                        digitalWrite(9, LOW);
                        delay(1000);
                        digitalWrite(9, HIGH);
                        status=1;
                      }
                      else{
                        status=0;
                      }
               }
                    break;
                }
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
    }

 

Aleks_neofit
Aleks_neofit аватар
Offline
Зарегистрирован: 28.12.2016

В строчке 71:   if(x!=-1)  может if(x!==1) ?

проще добавить в код строчку: Serial.println("Button just pressed");

и посмотреть в монитор порта

...

if(status==0){
                        Serial.println("Open The Damn Door");
                        digitalWrite(9, LOW);
                        delay(1000);
                        digitalWrite(9, HIGH);
			Serial.println("Button just pressed");
                        status=1;
                      }
                      else{
                        status=0;
                      }
               }
                    break;

...

CapsLock
Offline
Зарегистрирован: 10.03.2017

не работает ваш код

Aleks_neofit
Aleks_neofit аватар
Offline
Зарегистрирован: 28.12.2016

CapsLock, всё так - у меня сейчас нет интернет-модуля проверить - при обновлении страницы реле будет срабатывать если кнопка включалась 

страница сохранит ваш get запрос при обновлении

 70:  int x = HTTP_req.indexOf("hello=achbutton"); // функция indexOf() осуществляет поиск символов hello=achbutton в строке

Попробуйте так:

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(172, 16, 11, 250);
EthernetServer server(80);
String readString = String(30); //установим ограничение на запрос в 30 символов

void setup()
{
    digitalWrite(9, LOW);
    Ethernet.begin(mac, ip);
    server.begin();
    Serial.begin(9600);
    Serial.println("device is run");
    pinMode(9, OUTPUT);
}

void loop()
{
    EthernetClient client = server.available();

    if (client) {  // Проверяем подключен ли клиент к серверу
        while (client.connected())
  {
   char c = client.read();
   if (readString.length() < 30) {
   readString += c;
   }
   if (c == '\n') {   if(readString.indexOf("hello=onbutton") > 0) {
   Serial.println("device is on");
   digitalWrite(9, HIGH);
   }
   if(readString.indexOf("hello=offbutton") > 0) {
   Serial.println("device is off");
   digitalWrite(9, LOW);
   } 
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    client.println("<!DOCTYPE html>");
                    client.println("<head>");
                    client.println("<style>");
                    client.println(".button {");
                    client.println(" display: inline-block;");
                    client.println(" padding: 15px 55px;");
                    client.println(" font-size: 50px;");
                    client.println("cursor: pointer;");
                    client.println("text-align: center;");
                    client.println("text-decoration: none;");
                    client.println("outline: none;");
                    client.println(" color: #fff;");
                    client.println(" background-color: #4CAF50;");
                    client.println(" border: none;");
                    client.println(" border-radius: 15px;");
                    client.println("box-shadow: 0 9px #999;");
                    client.println("margin-left: 80px;");
                    client.println("}");
                    client.println(".button:hover {background-color: #3e8e41}");
                    client.println(".button:active {");
                    client.println(" background-color: #da2727;");
                    client.println(" box-shadow: 0 5px #666;");
                    client.println(" transform: translateY(4px);");
                    client.println("}");
                    client.println("</style>");
                    client.println("<meta charset='utf-8'>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h2> Включить реле кнопкой</h2>");
                    client.println("<form action='' method='get'>");
                    client.println ("<button type='submit' class='button' value='onbutton' name='hello'>Включить</button>");
          client.println ("<button type='submit' class='button' value='offbutton' name='hello'>Выключить</button>");
                    client.println("</form>");
                    client.println("</body>");
                    client.println("</html>");
                   readString="";
   client.stop();   }
    } // end if (client)
    }}