mirror of https://github.com/jeelabs/esp-link.git
parent
680edf931b
commit
d2764573d2
@ -0,0 +1,192 @@ |
||||
#include "WebServer.h" |
||||
|
||||
#define LED_PIN 13 |
||||
|
||||
int8_t blinking = 0; |
||||
int8_t frequency = 10; |
||||
uint8_t pattern = 2; |
||||
uint16_t elapse = 100; |
||||
uint16_t elapse_delta = 200; |
||||
uint32_t next_ts = 0; |
||||
|
||||
#define MAX_LOGS 5 |
||||
uint32_t log_ts[MAX_LOGS]; |
||||
uint8_t log_msg[MAX_LOGS]; |
||||
uint8_t log_ptr = 0; |
||||
|
||||
void ledInit() |
||||
{ |
||||
pinMode(LED_PIN, OUTPUT); |
||||
digitalWrite(LED_PIN, false); |
||||
} |
||||
|
||||
void ledLoop() |
||||
{
|
||||
if( blinking ) |
||||
{ |
||||
if( next_ts <= millis() ) |
||||
{ |
||||
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); |
||||
next_ts += elapse; |
||||
elapse = elapse_delta - elapse; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void ledAddLog(uint8_t msg) |
||||
{ |
||||
if( log_ptr >= MAX_LOGS ) |
||||
log_ptr = MAX_LOGS - 1; |
||||
|
||||
for(int8_t i=log_ptr-1; i >= 0; i--) |
||||
{ |
||||
log_ts[i+1] = log_ts[i]; |
||||
log_msg[i+1] = log_msg[i]; |
||||
} |
||||
log_msg[0] = msg; |
||||
log_ts[0] = millis(); |
||||
log_ptr++; |
||||
} |
||||
|
||||
void ledHistoryToLog(char * buf) |
||||
{ |
||||
buf[0] = 0; |
||||
strcat(buf, "["); |
||||
for(uint8_t i=0; i < log_ptr; i++) |
||||
{ |
||||
if( i != 0 ) |
||||
strcat(buf, ","); |
||||
|
||||
char bf[20]; |
||||
sprintf(bf, "\"%lds: ", log_ts[i] / 1000); |
||||
strcat(buf, bf); |
||||
|
||||
uint8_t msg = log_msg[i]; |
||||
if( msg == 0xE1 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set pattern to 25%-75%")); |
||||
} |
||||
else if( msg == 0xE2 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set pattern to 50%-50%")); |
||||
} |
||||
else if( msg == 0xE3 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set pattern to 75%-25%")); |
||||
} |
||||
else if( msg == 0xF0 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set led on")); |
||||
} |
||||
else if( msg == 0xF1 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set led blinking")); |
||||
} |
||||
else if( msg == 0xF2 ) |
||||
{ |
||||
strcat_P(buf, PSTR("set led off")); |
||||
} |
||||
else |
||||
{ |
||||
strcat_P(buf, PSTR("set frequency to ")); |
||||
sprintf(bf, "%d Hz", msg); |
||||
strcat(buf, bf); |
||||
} |
||||
strcat(buf, "\""); |
||||
} |
||||
strcat(buf, "]"); |
||||
} |
||||
|
||||
|
||||
void ledHtmlCallback(WebServerCommand command, char * data, int dataLen) |
||||
{ |
||||
switch(command) |
||||
{ |
||||
case BUTTON_PRESS: |
||||
if( strcmp_P(data, PSTR("btn_on") ) == 0 ) |
||||
{ |
||||
if( blinking || digitalRead(LED_PIN) == false ) |
||||
ledAddLog(0xF0); |
||||
blinking = 0; |
||||
digitalWrite(LED_PIN, true); |
||||
} else if( strcmp_P(data, PSTR("btn_off") ) == 0 ) |
||||
{ |
||||
if( blinking || digitalRead(LED_PIN) == true ) |
||||
ledAddLog(0xF2); |
||||
blinking = 0; |
||||
digitalWrite(LED_PIN, false); |
||||
} else if( strcmp_P(data, PSTR("btn_blink") ) == 0 ) |
||||
{ |
||||
if( !blinking ) |
||||
ledAddLog(0xF1); |
||||
blinking = 1; |
||||
next_ts = millis() + elapse; |
||||
} |
||||
break; |
||||
case SET_FIELD: |
||||
if( strcmp_P(data, PSTR("frequency") ) == 0 ) |
||||
{ |
||||
int8_t oldf = frequency; |
||||
frequency = webServer.getArgInt(); |
||||
digitalWrite(LED_PIN, false); |
||||
elapse_delta = 2000 / frequency; |
||||
elapse = pattern * elapse_delta / 4; |
||||
if( oldf != frequency ) |
||||
ledAddLog(frequency); |
||||
} |
||||
else if( strcmp_P(data, PSTR("pattern") ) == 0 ) |
||||
{ |
||||
int8_t oldp = pattern; |
||||
char * arg = webServer.getArgString(); |
||||
|
||||
if( strcmp_P(arg, PSTR("25_75")) == 0 ) |
||||
pattern = 1; |
||||
else if( strcmp_P(arg, PSTR("50_50")) == 0 ) |
||||
pattern = 2; |
||||
else if( strcmp_P(arg, PSTR("75_25")) == 0 ) |
||||
pattern = 3; |
||||
|
||||
digitalWrite(LED_PIN, false); |
||||
elapse = pattern * elapse_delta / 4; |
||||
|
||||
if( oldp != pattern ) |
||||
ledAddLog(0xE0 + pattern); |
||||
} |
||||
break; |
||||
case LOAD: |
||||
webServer.setArgNum(4); |
||||
webServer.setArgInt("frequency", frequency); |
||||
|
||||
switch(pattern) |
||||
{ |
||||
case 1: |
||||
webServer.setArgStringP("pattern", PSTR("25_75")); |
||||
break; |
||||
case 2: |
||||
webServer.setArgStringP("pattern", PSTR("50_50")); |
||||
break; |
||||
case 3: |
||||
webServer.setArgStringP("pattern", PSTR("75_25")); |
||||
break; |
||||
} |
||||
case REFRESH: |
||||
{ |
||||
if( command == REFRESH ) |
||||
webServer.setArgNum(2); |
||||
|
||||
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")); |
||||
|
||||
char buf[255]; |
||||
ledHistoryToLog(buf); |
||||
webServer.setArgJson("led_history", buf); |
||||
} |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,10 @@ |
||||
#ifndef PAGES_H |
||||
#define PAGES_H |
||||
|
||||
void ledHtmlCallback(WebServerCommand command, char * data, int dataLen); |
||||
void ledLoop(); |
||||
void ledInit(); |
||||
|
||||
#endif /* PAGES_H */ |
||||
|
||||
|
Loading…
Reference in new issue