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, тогда будет правильно.
У вас счетчик стоит за условием - поэтому и такие "аномалии".