Ethernet (w5500), непонятное поведение.
- Войдите на сайт для отправки комментариев
Втр, 27/08/2019 - 14:41
Всем привет. Пишу код для 64-ех датчиков температуры, влажности. Скетч пишеется из христоматийных примеров для ethernet.
В этом скетче формируется сервер, на нем таблица с условными,
тестовыми показаниями датчиков. В строках 25-79 формируется таблица. Строка 28 автообновление. В строке 82 поставил
счетчик z и с удивлением обнаружил, что сервер на один запрос отвечает дважды. То есть строки 25-79 выполняются
дважды за запрос. Я попробовал покоментить строки 20,22,23 и соответственно 80,81,84, но это не не исключило второй ответ или
код переставал корректно работать. Пробовал ставить delay, в разнызных местах, не помогло.
Надеюсь кто-то сможет ответить на вопрос:"Почему два ответа на один запрос?"
Спасибо за ответы.
#include <SPI.h>
#include <Ethernet2.h>
#define GARLAND 8 // Число датчиков в гирлянде
#define SENSOR 8 // Число датчиков в гирлянде
#define ANSWERSIZE 16 // получаем 16-тью байтами в запросе
int x=0;int y=0; int z=0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Макадрес
byte ip[] = { 192, 168, 1, 177 }; // IP адрес (изменить в title)
EthernetServer server(80);
void setup() { //Старт
Serial.begin(9600);
Ethernet.begin(mac, ip);
server.begin();
}
void loop() {
EthernetClient client = server.available();
if (client) {
// Проверяем подключен ли клиент к серверу
while (client.connected()) {
if (client.available()) {
// Выводим HTML страницу
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: 10"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE html>");
client.println("<html lang=\"ru\">");
client.println("<head>");
client.println("<title>ARDUINO test page</title>");
client.println("<meta charset=\"UTF-8\">");
client.println("<style type=text/css>");
client.println("body {font-family: Arial, Verdana, Tahoma;font-size:12px;color:303030;background-color:f0f0f0;}");
client.println("table {background-color:#FFFFFF;width:99%;margin: 0 auto;font-family: Arial, Verdana, Tahoma;font-size:12px;color:303030;border: 1px solid gray;padding:0;border-spacing: 0px;border-collapse: collapse;}");
client.println("th {font-weight:bold;border: 1px solid #a0a0a0;background-color:#305080;color:#ffffff;}");
client.println("td {text-align:center;border: 1px solid gray;}");
client.println("td.tempH {background-color:#f0c090;font-weight:bold;}");
client.println("td.humH {background-color:#90c0f0;font-weight:bold;}");
client.println("td.temp {background-color:#fff3e0;font-weight:normal;}");
client.println("td.hum {background-color:#e0f0ff;font-weight:normal;}");
client.println("div.datatable {background-color:#FFFFFF;padding:20;}");
client.println("</style></head>");
client.println("<body>"); // Видимая часть html - кода
client.println("<h1><i> Бочка №1 </i></h1>");
client.println("<div class=datatable >");
client.println("<table>");
client.println("<tr>");
for(y=1; y<=GARLAND; y++) {
client.print("<th colspan=2><i>Гирлянда № </i>");
client.print(y);
client.println("</th>");
}
client.println("</tr>");
client.println("<tr>");
for(y=1; y<=GARLAND; y++) {
client.println("<td class=tempH>Темп.,C°</td><td class=humH>Влаж.,%</td>");
}
client.println("</tr>");
for (x=0; x<SENSOR; x++) {
client.println("<tr>");
for(y=1; y<=GARLAND; y++) {
client.print("<td class=temp>");
client.print(x+z); // печать номера(в массиве) датчика
client.print("</td><td class=hum>");
client.print(y+z); // печать номера гирлянды
client.println("</td>");
}
client.println("</tr>");
}
client.println("</body>");
client.println("</html>");
client.stop();
}
}
z++; // счетчик ответов клиенту
delay(1000);
}
}
Не знаю как отредактировать свой текст. Просто в нумерации строк(описание) прибавьте 9, тогда будет правильно.
У вас счетчик стоит за условием - поэтому и такие "аномалии".