#include "WebServer.h" #define LED_PIN 13 int8_t blinking = 0; int8_t frequency = 10; uint16_t elapse = 100; uint32_t next_ts = 0; void ledHtmlCallback(WebServerCommand command, char * data, int dataLen); const char ledURL[] PROGMEM = "/LED.html.json"; const WebMethod PROGMEM methods[] = { { ledURL, ledHtmlCallback }, { NULL, NULL }, }; WebServer webServer(Serial, methods); void setup() { Serial.begin(57600); webServer.init(); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, false); } void loop() { webServer.loop(); if( blinking ) { if( next_ts <= millis() ) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); next_ts += elapse; } } } void ledHtmlCallback(WebServerCommand command, char * data, int dataLen) { switch(command) { case BUTTON_PRESS: if( strcmp_P(data, PSTR("btn_on") ) == 0 ) { blinking = 0; digitalWrite(LED_PIN, true); } else if( strcmp_P(data, PSTR("btn_off") ) == 0 ) { blinking = 0; digitalWrite(LED_PIN, false); } else if( strcmp_P(data, PSTR("btn_blink") ) == 0 ) { blinking = 1; next_ts = millis() + elapse; } break; case SET_FIELD: if( strcmp_P(data, PSTR("frequency") ) == 0 ) { frequency = webServer.getArgInt(); elapse = 1000 / frequency; } break; case LOAD: webServer.setArgNum(2); webServer.setArgInt("frequency", frequency); case REFRESH: if( command == REFRESH ) webServer.setArgNum(1); if( blinking ) webServer.setArgStringP("text", PSTR("LED is blinking")); else webServer.setArgStringP("text", digitalRead(LED_PIN) ? PSTR("LED is turned on") : PSTR("LED is turned off")); break; default: break; } }