Added auto cycle feature
This commit is contained in:
parent
d0ccc58aff
commit
bc2984cffc
4 changed files with 96 additions and 31 deletions
|
@ -348,7 +348,10 @@ void setup() {
|
|||
size_t fileSize = dir.fileSize();
|
||||
DBG_OUTPUT_PORT.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str());
|
||||
}
|
||||
DBG_OUTPUT_PORT.printf("\n");
|
||||
|
||||
FSInfo fs_info;
|
||||
SPIFFS.info(fs_info);
|
||||
DBG_OUTPUT_PORT.printf("FS Usage: %d/%d bytes\n\n", fs_info.usedBytes, fs_info.totalBytes);
|
||||
}
|
||||
|
||||
// ***************************************************************************
|
||||
|
|
|
@ -7,6 +7,14 @@ const char HOSTNAME[] = "ESP8266_01"; // Friedly hostname
|
|||
#define ENABLE_OTA // If defined, enable Arduino OTA code.
|
||||
|
||||
#define ENABLE_MQTT // If defined, enable MQTT client code.
|
||||
|
||||
// parameters for automatically cycling favorite patterns
|
||||
uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds)
|
||||
{0xff0000, 200, 1, 5.0}, // blink red for 5 seconds
|
||||
{0x00ff00, 200, 3, 10.0}, // wipe green for 10 seconds
|
||||
{0x0000ff, 200, 11, 5.0} // dual scan blue for 5 seconds
|
||||
};
|
||||
|
||||
#ifdef ENABLE_MQTT
|
||||
#define MQTT_MAX_PACKET_SIZE 256
|
||||
#define MQTT_MAX_RECONNECT_TRIES 4
|
||||
|
|
|
@ -123,11 +123,17 @@ void handleSetWS2812FXMode(uint8_t * mypayload) {
|
|||
ws2812fx_mode = constrain(ws2812fx_mode, 0, 255);
|
||||
strip.setColor(main_color.red, main_color.green, main_color.blue);
|
||||
strip.setMode(ws2812fx_mode);
|
||||
strip.start();
|
||||
}
|
||||
|
||||
char* listStatusJSON() {
|
||||
char json[255];
|
||||
snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}", mode, strip.getMode(), strip.getModeName(strip.getMode()), ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue);
|
||||
|
||||
char modeName[30];
|
||||
strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem
|
||||
|
||||
snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}",
|
||||
mode, strip.getMode(), modeName, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue);
|
||||
return json;
|
||||
}
|
||||
|
||||
|
@ -158,29 +164,25 @@ void getModesJSON() {
|
|||
// ***************************************************************************
|
||||
void handleMinimalUpload() {
|
||||
char temp[1500];
|
||||
int sec = millis() / 1000;
|
||||
int min = sec / 60;
|
||||
int hr = min / 60;
|
||||
|
||||
snprintf ( temp, 1500,
|
||||
"<!DOCTYPE html>\
|
||||
<html>\
|
||||
<head>\
|
||||
<title>ESP8266 Upload</title>\
|
||||
<meta charset=\"utf-8\">\
|
||||
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\
|
||||
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
|
||||
</head>\
|
||||
<body>\
|
||||
<form action=\"/edit\" method=\"post\" enctype=\"multipart/form-data\">\
|
||||
<input type=\"file\" name=\"data\">\
|
||||
<input type=\"text\" name=\"path\" value=\"/\">\
|
||||
<button>Upload</button>\
|
||||
</form>\
|
||||
</body>\
|
||||
</html>",
|
||||
hr, min % 60, sec % 60
|
||||
);
|
||||
"<!DOCTYPE html>\
|
||||
<html>\
|
||||
<head>\
|
||||
<title>ESP8266 Upload</title>\
|
||||
<meta charset=\"utf-8\">\
|
||||
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\
|
||||
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
|
||||
</head>\
|
||||
<body>\
|
||||
<form action=\"/edit\" method=\"post\" enctype=\"multipart/form-data\">\
|
||||
<input type=\"file\" name=\"data\">\
|
||||
<input type=\"text\" name=\"path\" value=\"/\">\
|
||||
<button>Upload</button>\
|
||||
</form>\
|
||||
</body>\
|
||||
</html>"
|
||||
);
|
||||
server.send ( 200, "text/html", temp );
|
||||
}
|
||||
|
||||
|
@ -199,6 +201,32 @@ void handleNotFound() {
|
|||
server.send ( 404, "text/plain", message );
|
||||
}
|
||||
|
||||
// automatic cycling
|
||||
Ticker autoTicker;
|
||||
int autoCount = 0;
|
||||
|
||||
void autoTick() {
|
||||
strip.setColor(autoParams[autoCount][0]);
|
||||
strip.setSpeed((uint8_t)autoParams[autoCount][1]);
|
||||
strip.setMode((uint8_t)autoParams[autoCount][2]);
|
||||
autoTicker.once((float)autoParams[autoCount][3], autoTick);
|
||||
DBG_OUTPUT_PORT.print("autoTick ");
|
||||
DBG_OUTPUT_PORT.println(autoCount);
|
||||
|
||||
autoCount++;
|
||||
if(autoCount >= (sizeof(autoParams) / sizeof(autoParams[0]))) autoCount=0;
|
||||
}
|
||||
|
||||
void handleAutoStart() {
|
||||
autoCount=0;
|
||||
autoTick();
|
||||
strip.start();
|
||||
}
|
||||
|
||||
void handleAutoStop() {
|
||||
autoTicker.detach();
|
||||
strip.stop();
|
||||
}
|
||||
|
||||
// ***************************************************************************
|
||||
// WS request handlers
|
||||
|
@ -292,6 +320,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
|
|||
handleSetWS2812FXMode(payload);
|
||||
webSocket.sendTXT(num, "OK");
|
||||
}
|
||||
|
||||
// start auto cycling
|
||||
if (strcmp((char *)payload, "start") == 0 ) {
|
||||
handleAutoStart();
|
||||
webSocket.sendTXT(num, "OK");
|
||||
}
|
||||
|
||||
// stop auto cycling
|
||||
if (strcmp((char *)payload, "stop") == 0 ) {
|
||||
handleAutoStop();
|
||||
webSocket.sendTXT(num, "OK");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@
|
|||
|
||||
<body>
|
||||
<nav class="blue light-blueXXX lighten-1XXX" role="navigation" id="mc-nav">
|
||||
<div class="nav-wrapper container"><a id="logo-container" href="#" class="brand-logo">Mc Lighting v2</a>
|
||||
<div class="nav-wrapper container">
|
||||
<a id="logo-container" href="#" class="brand-logo">Mc Lighting v2</a>
|
||||
<ul class="right hide-on-med-and-down">
|
||||
<li><a href="#" class="mc-navlink" data-pane="pane1">Wheel</a></li>
|
||||
<li><a href="#" class="mc-navlink" data-pane="pane2">Modes</a></li>
|
||||
|
@ -23,7 +24,6 @@
|
|||
<ul id="nav-mobile" class="side-nav">
|
||||
<li><a href="#" class="mc-navlink" data-pane="pane1">Wheel</a></li>
|
||||
<li><a href="#" class="mc-navlink" data-pane="pane2">Modes</a></li>
|
||||
|
||||
</ul>
|
||||
<a href="#" data-activates="nav-mobile" class="button-collapse"><i class="material-icons">menu</i></a>
|
||||
</div>
|
||||
|
@ -67,6 +67,11 @@
|
|||
<div id="status_pos">pick a color</div>
|
||||
<div id="status_color"></div>
|
||||
</div>
|
||||
<div class="right switch">Auto:<br>
|
||||
<label>Off
|
||||
<input id="autoSwitch" type="checkbox"><span class="lever"></span>On
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -108,13 +113,13 @@
|
|||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col s12 m6 l4 btn_grid">
|
||||
<div class="col s12 m6 l6 btn_grid">
|
||||
<a class="btn waves-effect waves-light btn_mode_static blue" name="action" data-mode="off">OFF
|
||||
<i class="material-icons right">send</i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="col s12 m6 l4 btn_grid">
|
||||
<div class="col s12 m6 l6 btn_grid">
|
||||
<a class="btn waves-effect waves-light btn_mode_static blue" name="action" data-mode="tv">TV
|
||||
<i class="material-icons right">send</i>
|
||||
</a>
|
||||
|
@ -193,8 +198,9 @@ $(function(){
|
|||
var modes_html = "";
|
||||
data.forEach(function(current_mode){
|
||||
if (current_mode.mode !== undefined) {
|
||||
modes_html += '<div class="col s12 m6 l4 btn_grid">';
|
||||
modes_html += '<a class="btn waves-effect waves-light btn_mode blue" name="action" data-mode="' + current_mode.mode + '">' + current_mode.name + '';
|
||||
modes_html += '<div class="col s12 m6 l6 btn_grid">';
|
||||
modes_html += '<a class="btn waves-effect waves-light btn_mode blue" name="action" data-mode="' +
|
||||
current_mode.mode + '">(' + current_mode.mode +') '+ current_mode.name;
|
||||
modes_html += '<i class="material-icons right">send</i>';
|
||||
modes_html += '</a>';
|
||||
modes_html += '</div>';
|
||||
|
@ -261,7 +267,15 @@ $(function(){
|
|||
|
||||
wsSendCommand("%" + brightness);
|
||||
});
|
||||
|
||||
|
||||
$("#autoSwitch").on("change",function() {
|
||||
if($(this).prop('checked')) {
|
||||
wsSendCommand("start");
|
||||
} else {
|
||||
wsSendCommand("stop");
|
||||
}
|
||||
});
|
||||
|
||||
function setMode(mode, finish_funtion) {
|
||||
console.log("Mode: ", mode);
|
||||
|
||||
|
@ -401,7 +415,7 @@ $(function(){
|
|||
$('#status').css("backgroundColor", hexColor);
|
||||
$('#status_color').text(hexColor + " - R=" + color[0] + ", G=" + color[1] + ", B=" + color[2]);
|
||||
$('#status_pos').text("x: " + pos.x + " - y: " + pos.y);
|
||||
|
||||
|
||||
$("#rng_red").val(color[0]);
|
||||
$("#rng_green").val(color[1]);
|
||||
$("#rng_blue").val(color[2]);
|
||||
|
|
Loading…
Reference in a new issue