Задержка изменения 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);
}
}
}
}
}
@Sion Escape, 👍-1
Обсуждение1 ответ
▲ 1
Внутри delay()
не может выполняться никакой другой код. Это также означает, что ни один клиент не может быть обслужен.
Замените эту загруженную задержкой функцию конечным автоматом, отражающим blinkWithoutDelay.
То есть вы проверяете if(millis() - previousTimestamp < delay)
и, если true, переходите к следующему состоянию в ваших миганиях и обновляете previousTimestamp
.
После этого if
вы вызываете receiveHttpRequest()
, чтобы узнать, ожидают ли какие-либо клиенты и обрабатывают ввод.
,
@ratchet freak
Смотрите также:
- Ошибка HTTP-запроса Arduino, медленное сотовое соединение
- Связь между Arduino UNO с помощью Ethernet-экрана и ВЧ-аттенюатора
- Как публиковать запросы HTTP POST на моем веб-сайте?
- Почтовый запрос HTTP в формате JSON с использованием модуля SIM900
- Как правильно отправлять данные через http с помощью sim908?
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- ESP8266 Ошибка неверного запроса 400
Вы ни в коем случае не вызываете
receiveHttpRequest()
. Просто создать функцию недостаточно — вам нужно вызвать эту функцию., @Majenko