Помогите новичку
- Войдите на сайт для отправки комментариев
Пт, 10/03/2017 - 16:46
привет, помогите плиз, проблема такая: Написал скетч с 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)
}
В строчке 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, всё так - у меня сейчас нет интернет-модуля проверить - при обновлении страницы реле будет срабатывать если кнопка включалась
страница сохранит ваш get запрос при обновлении
70:
intx = 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) }}