From c9973d111c65632edc0d81ccbf2775e1be61a31b Mon Sep 17 00:00:00 2001 From: Fisch Date: Wed, 23 Jan 2019 00:25:51 +0100 Subject: [PATCH] removed old effects, cleanup and change effect values --- LEDstoffroehre.ino | 583 +++++++++++++++++---------------------------- 1 file changed, 220 insertions(+), 363 deletions(-) diff --git a/LEDstoffroehre.ino b/LEDstoffroehre.ino index 95809e4..d75d945 100644 --- a/LEDstoffroehre.ino +++ b/LEDstoffroehre.ino @@ -1,166 +1,112 @@ #include #include -#define PIN_LIGHT D5 -#define PIN_LIGHT1 D6 -#define PIN_LIGHT2 D7 -#define PIN_LIGHT3 D8 +//curl -X PUT http://homie.config/config -d @config.json --header "Content-Type: application/json" + +#define PIN_LAMP0_EDGE D5 +#define PIN_LAMP0 D6 +#define PIN_LAMP1_EDGE D7 +#define PIN_LAMP1 D8 #define PIN_SENSOR D0 -#define FULL 255 -#define LOWER 50 -#define MINIMUM 1 -#define OFF 0 -int timeout = (1000-50); +//#define FULL 255 +//#define LOWER 50 +//#define MINIMUM 1 +//#define OFF 0 +//int timeout = (1000 - 50); -#define FW_NAME "esp-deckenlicht" +#define FW_NAME "ledstoffroehre" #define FW_VERSION "1.0.1" -int w0; -int w1; -int w2; -int w3; -int w0b, w1b, w2b, w3b; -int step = 0; -int strobo = 1; -bool disco = false; -int lastEvent = 0; -//Fluorescent effect -int fluorescentSet=0; -bool fluorescentActive=false; -long fluorescentLastActivated=0; -#define FLUORESCENT_TIMEDIVIDE 10 -int fluorescentTemp=0; + +int lamp0e=0; +int lamp0=0; +int lamp1e=0; +int lamp1=0; + +long fluorescentLastUpdated=0; //global #define FLUORESCENTUPDATEINTERVAL 20 -long fluorescentLastUpdated=0; -int fluorescentCurrentBrightness0=0; //current brightness for effect duration -int fluorescentCurrentBrightness1=0; -int fluorescentCurrentBrightness2=0; -int fluorescentCurrentBrightness3=0; -#define FLUORESCENTTEMPMAX 400 -int fluorescentAge=0; +long fluorescent0LastActivated = 0; +long fluorescent1LastActivated = 0; + +int setbrightness0 = 0; +int setbrightness1 = 0; +bool fluorescent0Active=false; +bool fluorescent1Active=false; +int fluorescent0Age=10; +int fluorescent1Age=10; #define FLUORESCENTAGEMAX 20 +#define FLUORESCENTTEMPMAX 1000 +int fluorescent0Temp=0; +int fluorescent1Temp=0; +#define GLOWBRIGHTNESS 5 + bool lastSensorValue = false; -HomieNode lightNode("strip", "strip"); +HomieNode lightNode("lamp", "lamp"); HomieNode sensorNode("sensor", "sensor"); Bounce debouncer = Bounce(); -bool speedHandler(const HomieRange& range, const String& value) { - Homie.getLogger() << "speed " << ": " << value << endl; - timeout = value.toInt(); - lightNode.setProperty("speed").send(value); - return true; -} - -bool stroboToggleHandler(const HomieRange& range, const String& value) { - Homie.getLogger() << "stroboToggle " << ": " << value << endl; - lightNode.setProperty("stroboToggle").send(value); - strobo *= -1; - if (strobo == 1) - { - w0 = w1 = w2 = w3 = FULL; - } - else - { - w0 = w1 = w2 = w3 = OFF; - } - output(); -} - -bool beatHandler(const HomieRange& range, const String& value) { - Homie.getLogger() << "beat " << ": " << value << endl; - lightNode.setProperty("beat").send(value); - if (step >= 4) { - step = 0; - } - // Cycle each light from 255 to 50 to 1 to off - switch (step) - { - case 0: - w0 = FULL; - w1 = OFF; - w2 = MINIMUM; - w3 = LOWER; - break; - case 1: - w1 = FULL; - w2 = OFF; - w3 = MINIMUM; - w0 = LOWER; - break; - case 2: - w2 = FULL; - w3 = OFF; - w0 = MINIMUM; - w1 = LOWER; - break; - case 3: - w3 = FULL; - w0 = OFF; - w1 = MINIMUM; - w2 = LOWER; - break; - default: - w0 = w1 = w2 = w3 = 0; - break; - } - output(); - step++; -} - -bool discoHandler(const HomieRange& range, const String& value) { - Homie.getLogger() << "disco " << ": " << value << endl; - lightNode.setProperty("disco").send(value); - if (value.toInt() == 0) - { - disco = false; - // Return to previous state - w0 = w0b; - w1 = w1b; - w2 = w2b; - w3 = w3b; - output(); - } else - { - step = 0; - w0b = w0; - w1b = w1; - w2b = w2; - w3b = w3; - disco = true; - } - return true; -} bool fluorescentHandler(const HomieRange& range, const String& value) { Homie.getLogger() << "fluorescent " << ": " << value << endl; lightNode.setProperty("fluorescent").send(value); - fluorescentSet=value.toInt(); - disco = false; - if (fluorescentSet==0){ // turned off - fluorescentActive=false; //set effect off - w0 = 0; - w1 = 0; - w2 = 0; - w3 = 0; - }else{ //turned on - if (w0==0 && w1==0 && w2==0 && w3==0){ //turned on and was off before - //Initialization - fluorescentActive=true; //start effect - fluorescentLastActivated=millis(); - fluorescentLastUpdated=millis(); - fluorescentTemp=0; //"temperature" for warmup - fluorescentCurrentBrightness0=0; //brightness for effect duration - fluorescentCurrentBrightness1=0; - fluorescentCurrentBrightness2=0; - fluorescentCurrentBrightness3=0; - }else{ - fluorescentActive=false; //set effect off - w0 = w1 = w2 = w3 = fluorescentSet; - } + setbrightness0 = value.toInt(); + setbrightness1 = value.toInt(); + fluorescent0Temp=0; + fluorescent1Temp=0; + + if (setbrightness0 == 0 || setbrightness1 == 0) { // turned off + fluorescent0Active = false; //set effect off + fluorescent1Active = false; //set effect off + fluorescent0LastActivated = millis(); + fluorescent1LastActivated = millis(); + lamp0e=0; + lamp0=0; + lamp1e=0; + lamp1=0; + } else { //turned on + //Initialization + fluorescent0Active = true; //start effect + fluorescent1Active = true; //start effect + } + output(); + return true; +} +bool fluorescent0Handler(const HomieRange& range, const String& value) { + Homie.getLogger() << "fluorescent0 " << ": " << value << endl; + lightNode.setProperty("fluorescent0").send(value); + setbrightness0 = value.toInt(); + fluorescent0Temp=0; + + if (setbrightness0 == 0) { // turned off + fluorescent0Active = false; //set effect off + fluorescent0LastActivated = millis(); + lamp0e=0; + lamp0 = 0; + } else { //turned on + //Initialization + fluorescent0Active = true; //start effect + } + output(); + return true; +} +bool fluorescent1Handler(const HomieRange& range, const String& value) { + Homie.getLogger() << "fluorescent1 " << ": " << value << endl; + lightNode.setProperty("fluorescent1").send(value); + setbrightness1 = value.toInt(); + fluorescent1Temp=0; + + if (setbrightness1 == 0) { // turned off + fluorescent1Active = false; //set effect off + fluorescent1LastActivated = millis(); + lamp1e=0; + lamp1 = 0; + } else { //turned on + //Initialization + fluorescent1Active = true; //start effect } output(); return true; @@ -168,248 +114,160 @@ bool fluorescentHandler(const HomieRange& range, const String& value) { bool fluorescentAgeHandler(const HomieRange& range, const String& value) { Homie.getLogger() << "fluorescentAge " << ": " << value << endl; - fluorescentAge=value.toInt(); - if (fluorescentAge<0){ - fluorescentAge=0; - }else if(fluorescentAge>FLUORESCENTAGEMAX){ - fluorescentAge=FLUORESCENTAGEMAX; - } + fluorescent0Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX); + fluorescent1Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX); + return true; +} +bool fluorescent0AgeHandler(const HomieRange& range, const String& value) { + Homie.getLogger() << "fluorescent0Age " << ": " << value << endl; + fluorescent0Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX); + return true; +} +bool fluorescent1AgeHandler(const HomieRange& range, const String& value) { + Homie.getLogger() << "fluorescent1Age " << ": " << value << endl; + fluorescent1Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX); return true; } -bool lightHandler(const HomieRange& range, const String& value) { - Homie.getLogger() << "light " << ": " << value << endl; - disco = false; - w0 = value.toInt(); - w1 = value.toInt(); - w2 = value.toInt(); - w3 = value.toInt(); - lightNode.setProperty("light").send(value); + +bool lampHandler(const HomieRange& range, const String& value) { + Homie.getLogger() << "lamp0,1 " << ": " << value << endl; + lamp0 = value.toInt(); + lamp0e = value.toInt(); + lamp1 = value.toInt(); + lamp1e = value.toInt(); + lightNode.setProperty("lamp0").send(value); + lightNode.setProperty("lamp1").send(value); + fluorescent0Active = false; + fluorescent1Active = false; output(); return true; } -bool light0Handler(const HomieRange& range, const String& value) { - Homie.getLogger() << "light0 " << ": " << value << endl; - w0 = value.toInt(); - disco = false; - lightNode.setProperty("light0").send(value); +bool lamp0Handler(const HomieRange& range, const String& value) { + Homie.getLogger() << "lamp0 " << ": " << value << endl; + lamp0 = value.toInt(); + lamp0e = value.toInt(); + lightNode.setProperty("lamp0").send(value); + fluorescent0Active = false; output(); return true; } -bool light1Handler(const HomieRange& range, const String& value) { - Homie.getLogger() << "light1 " << ": " << value << endl; - w1 = value.toInt(); - disco = false; - lightNode.setProperty("light1").send(value); +bool lamp1Handler(const HomieRange& range, const String& value) { + Homie.getLogger() << "lamp1 " << ": " << value << endl; + lamp1 = value.toInt(); + lamp1e = value.toInt(); + lightNode.setProperty("lamp1").send(value); + fluorescent1Active = false; output(); return true; } -bool light2Handler(const HomieRange& range, const String& value) { - Homie.getLogger() << "light2 " << ": " << value << endl; - w2 = value.toInt(); - disco = false; - lightNode.setProperty("light2").send(value); - output(); - return true; -} - -bool light3Handler(const HomieRange& range, const String& value) { - Homie.getLogger() << "light3 " << ": " << value << endl; - w3 = value.toInt(); - disco = false; - lightNode.setProperty("light3").send(value); - output(); - return true; -} void output() { // * 4 to scale the input up for ESP Arduino default 10 bit PWM - if (w0 == FULL) - { - analogWrite(PIN_LIGHT, 1023); - } else { - analogWrite(PIN_LIGHT, w0*4); - } - if (w1 == FULL) - { - analogWrite(PIN_LIGHT1, 1023); - } else { - analogWrite(PIN_LIGHT1, w1*4); - } - if (w2 == FULL) - { - analogWrite(PIN_LIGHT2, 1023); - } else { - analogWrite(PIN_LIGHT2, w2*4); - } - if (w3 == FULL) - { - analogWrite(PIN_LIGHT3, 1023); - } else { - analogWrite(PIN_LIGHT3, w3*4); - } + analogWrite(PIN_LAMP0_EDGE, constrain(lamp0e * 4,0,1023)); + analogWrite(PIN_LAMP0, constrain(lamp0 * 4,0,1023)); + analogWrite(PIN_LAMP1_EDGE, constrain(lamp1e * 4,0,1023)); + analogWrite(PIN_LAMP1, constrain(lamp1 * 4,0,1023)); } void loopHandler() { - if (disco) - { - if (millis() - lastEvent >= (1000-timeout) || lastEvent == 0) { - lastEvent = millis(); - if (step >= 4) { - step = 0; + //mosquitto_pub -h raum.ctdo.de -t "homie/esp-deckenlicht/strip/fluorescent/set" -m "255" + + + if (millis() > fluorescentLastUpdated + FLUORESCENTUPDATEINTERVAL) { //Update values + fluorescentLastUpdated = millis(); + + if (fluorescent0Active) { + //long _time = millis() - fluorescent0LastActivated; //time since activated + + int fluorescentTempIncreaseMax=61-(fluorescent0Age*3); + fluorescent0Temp +=1+ random(0,fluorescentTempIncreaseMax *fluorescent0Temp/FLUORESCENTTEMPMAX); + + if (random(0,80 )==0){ //ignite + lamp0=setbrightness0*random(50,100)/100; } - // Cycle each light from 255 to 50 to 1 to off - switch (step) - { - case 0: - w0 = FULL; - w1 = OFF; - w2 = MINIMUM; - w3 = LOWER; - break; - case 1: - w1 = FULL; - w2 = OFF; - w3 = MINIMUM; - w0 = LOWER; - break; - case 2: - w2 = FULL; - w3 = OFF; - w0 = MINIMUM; - w1 = LOWER; - break; - case 3: - w3 = FULL; - w0 = OFF; - w1 = MINIMUM; - w2 = LOWER; - break; - default: - w0 = w1 = w2 = w3 = 0; - break; - } - output(); - step++; - } - } - if (fluorescentActive){ - long _time=millis()-fluorescentLastActivated; //time since activated - - //mosquitto_pub -h raum.ctdo.de -t "homie/esp-deckenlicht/strip/fluorescent/set" -m "255" - - if (millis() > fluorescentLastUpdated+FLUORESCENTUPDATEINTERVAL){ //Update values - fluorescentLastUpdated=millis(); - - /* - fluorescentTemp+=random(0, 3); //min (inclusive), max (exclusive) - fluorescentLastUpdated=millis(); - - if (random(0,256)fluorescentTemp*1.0/FLUORESCENTTEMPMAX*256){ //the colder, the more often - if (fluorescentCurrentBrightness<5){ //not on - if (random(0,50)==0){ //ignite - fluorescentCurrentBrightness=fluorescentSet/100.0*random(50,100); + if (fluorescent0Temp>200){ //warm enough to glow + if (lamp0<20){ //if under glow brightness + lamp0+=5; //start glowing + }else if (lamp0>50){ //too bright for glow + lamp0-=random(0,30); //reduce intensity (flashing effect) } - } - if (fluorescentCurrentBrightness>20){ //minimum brightness - fluorescentCurrentBrightness-=random(20,40); - }else{ - fluorescentCurrentBrightness+=random(2,3)-2; - } - } - */ - - - int fluorescentTempIncreaseMax=61-(fluorescentAge*3); - - fluorescentTemp+=1+ random(0,fluorescentTempIncreaseMax *fluorescentTemp/FLUORESCENTTEMPMAX); - //fluorescentTemp+=3; - - if (random(0,80)==0){ //ignite - fluorescentCurrentBrightness0=fluorescentSet*random(50,100)/100; - fluorescentCurrentBrightness1=fluorescentSet*random(50,100)/100; - fluorescentCurrentBrightness2=fluorescentSet*random(50,100)/100; - fluorescentCurrentBrightness3=fluorescentSet*random(50,100)/100; - } - - if (fluorescentTemp>200){ // warm enough to glow - if (fluorescentCurrentBrightness0<20){ //if under glow brightness - fluorescentCurrentBrightness0+=5; //start glowing - }else if(fluorescentCurrentBrightness0>50){ //too bright to glow - fluorescentCurrentBrightness0-=random(0,30); //reduce intensity - } - - if (fluorescentCurrentBrightness1<20){ //if under glow brightness - fluorescentCurrentBrightness1+=5; //start glowing - }else if(fluorescentCurrentBrightness1>50){ //too bright to glow - fluorescentCurrentBrightness1-=random(0,30); //reduce intensity - } - - if (fluorescentCurrentBrightness2<20){ //if under glow brightness - fluorescentCurrentBrightness2+=5; //start glowing - }else if(fluorescentCurrentBrightness2>50){ //too bright to glow - fluorescentCurrentBrightness2-=random(0,30); //reduce intensity - } - - if (fluorescentCurrentBrightness3<20){ //if under glow brightness - fluorescentCurrentBrightness3+=5; //start glowing - }else if(fluorescentCurrentBrightness3>50){ //too bright to glow - fluorescentCurrentBrightness3-=random(0,30); //reduce intensity - } }else{ //not warm enough to glow - if (fluorescentCurrentBrightness0>0){ - fluorescentCurrentBrightness0-=random(20,50); //reduce intensity - } - - if (fluorescentCurrentBrightness1>0){ - fluorescentCurrentBrightness1-=random(20,50); //reduce intensity - } - - if (fluorescentCurrentBrightness2>0){ - fluorescentCurrentBrightness2-=random(20,50); //reduce intensity - } - - if (fluorescentCurrentBrightness3>0){ - fluorescentCurrentBrightness3-=random(20,50); //reduce intensity - } + if (lamp0>0){ //too bright for glow + lamp0-=random(20,50); //reduce intensity (flashing effect) + } } + if(lamp0>GLOWBRIGHTNESS){ + lamp0e=lamp0; + } + + if (fluorescent0Temp>=FLUORESCENTTEMPMAX){ + fluorescent0Active=false; + lamp0=setbrightness0; + lamp0e=setbrightness0; + } + + + lamp0=constrain(lamp0, 0,255); + lamp0e=constrain(lamp0e, 0,255); + output(); + } + - if (fluorescentTemp>=FLUORESCENTTEMPMAX){ //finished - fluorescentActive=false; - fluorescentCurrentBrightness0=fluorescentSet; //set disired value - fluorescentCurrentBrightness1=fluorescentSet; //set disired value - fluorescentCurrentBrightness2=fluorescentSet; //set disired value - fluorescentCurrentBrightness3=fluorescentSet; //set disired value + + if (fluorescent1Active) { + //long _time = millis() - fluorescent0LastActivated; //time since activated + + int fluorescentTempIncreaseMax=61-(fluorescent1Age*3); + fluorescent1Temp +=1+ random(0,fluorescentTempIncreaseMax *fluorescent1Temp/FLUORESCENTTEMPMAX); //+= 1+ random(0,20* fluorescent0Temp/FLUORESCENTTEMPMAX); + + if (random(0,80 )==0){ //ignite + lamp1=setbrightness1*random(50,100)/100; } + if (fluorescent1Temp>200){ //warm enough to glow + if (lamp1<20){ //if under glow brightness + lamp1+=5; //start glowing + }else if (lamp1>50){ //too bright for glow + lamp1-=random(0,30); //reduce intensity (flashing effect) + } + }else{ //not warm enough to glow + if (lamp1>0){ //too bright for glow + lamp1-=random(20,50); //reduce intensity (flashing effect) + } + } - fluorescentCurrentBrightness0=_min(255,_max(0,fluorescentCurrentBrightness0)); - fluorescentCurrentBrightness1=_min(255,_max(0,fluorescentCurrentBrightness1)); - fluorescentCurrentBrightness2=_min(255,_max(0,fluorescentCurrentBrightness2)); - fluorescentCurrentBrightness3=_min(255,_max(0,fluorescentCurrentBrightness3)); - - w0 = fluorescentCurrentBrightness0; - w1 = fluorescentCurrentBrightness1; - w2 = fluorescentCurrentBrightness2; - w3 = fluorescentCurrentBrightness3; + if(lamp1>GLOWBRIGHTNESS){ + lamp1e=lamp1; + } + + if (fluorescent1Temp>=FLUORESCENTTEMPMAX){ + fluorescent1Active=false; + lamp1=setbrightness1; + lamp1e=setbrightness1; + } + + lamp1=constrain(lamp1, 0,255); + lamp1e=constrain(lamp1e, 0,255); output(); } + + } + + + + bool sensorValue = debouncer.read(); if (Homie.isConfigured() && Homie.isConnected() && sensorValue != lastSensorValue) { - sensorNode.setProperty("motion").send(sensorValue ? "true" : "false"); - lastSensorValue = sensorValue; + sensorNode.setProperty("motion").send(sensorValue ? "true" : "false"); + lastSensorValue = sensorValue; } } @@ -418,12 +276,12 @@ void setup() { Serial.begin(115200); Serial << endl << endl; - pinMode(PIN_LIGHT, OUTPUT); - pinMode(PIN_LIGHT1, OUTPUT); - pinMode(PIN_LIGHT2, OUTPUT); - pinMode(PIN_LIGHT3, OUTPUT); - - debouncer.attach(PIN_SENSOR,INPUT); + pinMode(PIN_LAMP0_EDGE, OUTPUT); + pinMode(PIN_LAMP0, OUTPUT); + pinMode(PIN_LAMP1_EDGE, OUTPUT); + pinMode(PIN_LAMP1, OUTPUT); + + debouncer.attach(PIN_SENSOR, INPUT); debouncer.interval(50); @@ -431,21 +289,20 @@ void setup() { Homie_setBrand(FW_NAME); Homie.setLoopFunction(loopHandler); - lightNode.advertise("speed").settable(speedHandler); - lightNode.advertise("disco").settable(discoHandler); - lightNode.advertise("beat").settable(beatHandler); - lightNode.advertise("light").settable(lightHandler); - lightNode.advertise("light0").settable(light0Handler); - lightNode.advertise("light1").settable(light1Handler); - lightNode.advertise("light2").settable(light2Handler); - lightNode.advertise("light3").settable(light3Handler); + lightNode.advertise("lamp").settable(lampHandler); + lightNode.advertise("lamp0").settable(lamp0Handler); + lightNode.advertise("lamp1").settable(lamp1Handler); lightNode.advertise("fluorescent").settable(fluorescentHandler); lightNode.advertise("fluorescentage").settable(fluorescentAgeHandler); - + lightNode.advertise("fluorescent0").settable(fluorescent0Handler); + lightNode.advertise("fluorescent0age").settable(fluorescent0AgeHandler); + lightNode.advertise("fluorescent1").settable(fluorescent1Handler); + lightNode.advertise("fluorescent1age").settable(fluorescent1AgeHandler); + sensorNode.advertise("motion"); // Activate other PWM frequency. 1000 (1 KHz) is default - analogWriteFreq(30000); + analogWriteFreq(20000); // Restore last state output();