Ethernet (w5500), непонятное поведение.

Yura_15
Offline
Зарегистрирован: 02.08.2019
Всем привет. Пишу код для 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&deg;</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);
  }
}

 

Yura_15
Offline
Зарегистрирован: 02.08.2019

Не знаю как отредактировать свой текст. Просто в нумерации строк(описание) прибавьте 9, тогда будет правильно.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

У вас счетчик стоит за условием - поэтому и такие "аномалии".