Задержка изменения HTTP-запроса

Я новичок в кодировании, я пытаюсь заставить светодиод мигать (с успехом), и теперь я хотел бы добавить http-запрос для изменения задержки.

У меня нет ошибок при компиляции кода, но он не работает.

Спасибо

 include SPI.h
 include Ethernet.h

unsigned long maxTime = 4000;


EthernetServer arduinoServer(81);
EthernetServer httpServer(80);

// Введите ниже MAC-адрес и IP-адрес вашего контроллера.
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 8, 60);

// Инициализируем библиотеку сервера Ethernet
// с IP-адресом и портом, который вы хотите использовать
// (порт 80 по умолчанию для HTTP):
EthernetServer server(80);

////КОД 11001010
int led1 = 6;  // = 0
int led2 = 7;  // = 1


void setup() {
  Serial.begin(9600);

  // Настройте 3 контакта как ВЫХОД
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);


  // Вы можете использовать Ethernet.init(pin) для настройки вывода CS
  //Ethernet.init(10); // Большинство шилдов Arduino
  //Ethernet.init(5); // Щит MKR ETH
  //Ethernet.init(0); // Тинси 2.0
  //Ethernet.init(20); // Тинси++ 2.0
  //Ethernet.init(15); // ESP8266 с Adafruit Featherwing Ethernet
  //Ethernet.init(33); // ESP32 с Adafruit Featherwing Ethernet

  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }
  Serial.println("Ethernet WebServer Example");

  // запускаем соединение Ethernet и сервер:
  Ethernet.begin(mac, ip);

  // Проверяем наличие оборудования Ethernet
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // ничего не делать, нет смысла работать без оборудования Ethernet
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // запускаем сервер
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());

}

void loop() 
{
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  delay(maxTime);
  digitalWrite(led2, LOW);
  delay(maxTime);
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  delay(maxTime);
   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
  delay(maxTime);
  digitalWrite(led1, LOW);
   delay(maxTime);

   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
  delay(maxTime);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
  delay(maxTime);
   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
  delay(maxTime);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
  delay(maxTime);
   digitalWrite(led1, HIGH);
   digitalWrite(led2, LOW);
  delay(maxTime);
     digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
  delay(5000);



 // прослушивание входящих клиентов
}

void receiveHttpRequest() {
  EthernetClient client = httpServer.available();
  String requestInputString;
  boolean resetArduino = false;
  boolean forceSolved = false;
  client.setConnectionTimeout(50);

  if (client)
  {
    Serial.println("new client");
    // HTTP-запрос заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    boolean firstLine = true;
    requestInputString = String("");
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        if (firstLine)
        {
          requestInputString += String(c);
        }
        Serial.write(c);
        // если вы дошли до конца строки (получили перевод строки
        // символ) и строка пуста, HTTP-запрос завершился,
        // чтобы вы могли отправить ответ
        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("<html><body>");

            int newMaxTime = requestInputString.substring(20).toInt();
            if (newMaxTime < 2000) {
              newMaxTime = 2000;
            }

            maxTime = newMaxTime;

            client.print(String("New maxTime is: "));
            client.println(maxTime);
          }
        }
      }
    }
  }

, 👍-1

Обсуждение

Вы ни в коем случае не вызываете receiveHttpRequest(). Просто создать функцию недостаточно — вам нужно вызвать эту функцию., @Majenko


1 ответ


1

Внутри delay() не может выполняться никакой другой код. Это также означает, что ни один клиент не может быть обслужен.

Замените эту загруженную задержкой функцию конечным автоматом, отражающим blinkWithoutDelay.

То есть вы проверяете if(millis() - previousTimestamp < delay) и, если true, переходите к следующему состоянию в ваших миганиях и обновляете previousTimestamp.

После этого if вы вызываете receiveHttpRequest(), чтобы узнать, ожидают ли какие-либо клиенты и обрабатывают ввод.

,