removed old effects, cleanup and change effect values
This commit is contained in:
parent
952d197336
commit
c9973d111c
|
@ -1,166 +1,112 @@
|
||||||
#include <Homie.h>
|
#include <Homie.h>
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
|
|
||||||
#define PIN_LIGHT D5
|
//curl -X PUT http://homie.config/config -d @config.json --header "Content-Type: application/json"
|
||||||
#define PIN_LIGHT1 D6
|
|
||||||
#define PIN_LIGHT2 D7
|
#define PIN_LAMP0_EDGE D5
|
||||||
#define PIN_LIGHT3 D8
|
#define PIN_LAMP0 D6
|
||||||
|
#define PIN_LAMP1_EDGE D7
|
||||||
|
#define PIN_LAMP1 D8
|
||||||
#define PIN_SENSOR D0
|
#define PIN_SENSOR D0
|
||||||
|
|
||||||
#define FULL 255
|
//#define FULL 255
|
||||||
#define LOWER 50
|
//#define LOWER 50
|
||||||
#define MINIMUM 1
|
//#define MINIMUM 1
|
||||||
#define OFF 0
|
//#define OFF 0
|
||||||
int timeout = (1000-50);
|
//int timeout = (1000 - 50);
|
||||||
|
|
||||||
#define FW_NAME "esp-deckenlicht"
|
#define FW_NAME "ledstoffroehre"
|
||||||
#define FW_VERSION "1.0.1"
|
#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;
|
int lamp0e=0;
|
||||||
bool fluorescentActive=false;
|
int lamp0=0;
|
||||||
long fluorescentLastActivated=0;
|
int lamp1e=0;
|
||||||
#define FLUORESCENT_TIMEDIVIDE 10
|
int lamp1=0;
|
||||||
int fluorescentTemp=0;
|
|
||||||
|
long fluorescentLastUpdated=0; //global
|
||||||
#define FLUORESCENTUPDATEINTERVAL 20
|
#define FLUORESCENTUPDATEINTERVAL 20
|
||||||
long fluorescentLastUpdated=0;
|
long fluorescent0LastActivated = 0;
|
||||||
int fluorescentCurrentBrightness0=0; //current brightness for effect duration
|
long fluorescent1LastActivated = 0;
|
||||||
int fluorescentCurrentBrightness1=0;
|
|
||||||
int fluorescentCurrentBrightness2=0;
|
int setbrightness0 = 0;
|
||||||
int fluorescentCurrentBrightness3=0;
|
int setbrightness1 = 0;
|
||||||
#define FLUORESCENTTEMPMAX 400
|
bool fluorescent0Active=false;
|
||||||
int fluorescentAge=0;
|
bool fluorescent1Active=false;
|
||||||
|
int fluorescent0Age=10;
|
||||||
|
int fluorescent1Age=10;
|
||||||
#define FLUORESCENTAGEMAX 20
|
#define FLUORESCENTAGEMAX 20
|
||||||
|
#define FLUORESCENTTEMPMAX 1000
|
||||||
|
int fluorescent0Temp=0;
|
||||||
|
int fluorescent1Temp=0;
|
||||||
|
#define GLOWBRIGHTNESS 5
|
||||||
|
|
||||||
|
|
||||||
bool lastSensorValue = false;
|
bool lastSensorValue = false;
|
||||||
|
|
||||||
HomieNode lightNode("strip", "strip");
|
HomieNode lightNode("lamp", "lamp");
|
||||||
HomieNode sensorNode("sensor", "sensor");
|
HomieNode sensorNode("sensor", "sensor");
|
||||||
Bounce debouncer = Bounce();
|
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) {
|
bool fluorescentHandler(const HomieRange& range, const String& value) {
|
||||||
Homie.getLogger() << "fluorescent " << ": " << value << endl;
|
Homie.getLogger() << "fluorescent " << ": " << value << endl;
|
||||||
lightNode.setProperty("fluorescent").send(value);
|
lightNode.setProperty("fluorescent").send(value);
|
||||||
fluorescentSet=value.toInt();
|
setbrightness0 = value.toInt();
|
||||||
disco = false;
|
setbrightness1 = value.toInt();
|
||||||
if (fluorescentSet==0){ // turned off
|
fluorescent0Temp=0;
|
||||||
fluorescentActive=false; //set effect off
|
fluorescent1Temp=0;
|
||||||
w0 = 0;
|
|
||||||
w1 = 0;
|
if (setbrightness0 == 0 || setbrightness1 == 0) { // turned off
|
||||||
w2 = 0;
|
fluorescent0Active = false; //set effect off
|
||||||
w3 = 0;
|
fluorescent1Active = false; //set effect off
|
||||||
|
fluorescent0LastActivated = millis();
|
||||||
|
fluorescent1LastActivated = millis();
|
||||||
|
lamp0e=0;
|
||||||
|
lamp0=0;
|
||||||
|
lamp1e=0;
|
||||||
|
lamp1=0;
|
||||||
} else { //turned on
|
} else { //turned on
|
||||||
if (w0==0 && w1==0 && w2==0 && w3==0){ //turned on and was off before
|
|
||||||
//Initialization
|
//Initialization
|
||||||
fluorescentActive=true; //start effect
|
fluorescent0Active = true; //start effect
|
||||||
fluorescentLastActivated=millis();
|
fluorescent1Active = true; //start effect
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
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();
|
output();
|
||||||
return true;
|
return true;
|
||||||
|
@ -168,244 +114,156 @@ bool fluorescentHandler(const HomieRange& range, const String& value) {
|
||||||
|
|
||||||
bool fluorescentAgeHandler(const HomieRange& range, const String& value) {
|
bool fluorescentAgeHandler(const HomieRange& range, const String& value) {
|
||||||
Homie.getLogger() << "fluorescentAge " << ": " << value << endl;
|
Homie.getLogger() << "fluorescentAge " << ": " << value << endl;
|
||||||
fluorescentAge=value.toInt();
|
fluorescent0Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||||
if (fluorescentAge<0){
|
fluorescent1Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||||
fluorescentAge=0;
|
return true;
|
||||||
}else if(fluorescentAge>FLUORESCENTAGEMAX){
|
|
||||||
fluorescentAge=FLUORESCENTAGEMAX;
|
|
||||||
}
|
}
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool lightHandler(const HomieRange& range, const String& value) {
|
|
||||||
Homie.getLogger() << "light " << ": " << value << endl;
|
bool lampHandler(const HomieRange& range, const String& value) {
|
||||||
disco = false;
|
Homie.getLogger() << "lamp0,1 " << ": " << value << endl;
|
||||||
w0 = value.toInt();
|
lamp0 = value.toInt();
|
||||||
w1 = value.toInt();
|
lamp0e = value.toInt();
|
||||||
w2 = value.toInt();
|
lamp1 = value.toInt();
|
||||||
w3 = value.toInt();
|
lamp1e = value.toInt();
|
||||||
lightNode.setProperty("light").send(value);
|
lightNode.setProperty("lamp0").send(value);
|
||||||
|
lightNode.setProperty("lamp1").send(value);
|
||||||
|
fluorescent0Active = false;
|
||||||
|
fluorescent1Active = false;
|
||||||
output();
|
output();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool light0Handler(const HomieRange& range, const String& value) {
|
bool lamp0Handler(const HomieRange& range, const String& value) {
|
||||||
Homie.getLogger() << "light0 " << ": " << value << endl;
|
Homie.getLogger() << "lamp0 " << ": " << value << endl;
|
||||||
w0 = value.toInt();
|
lamp0 = value.toInt();
|
||||||
disco = false;
|
lamp0e = value.toInt();
|
||||||
lightNode.setProperty("light0").send(value);
|
lightNode.setProperty("lamp0").send(value);
|
||||||
|
fluorescent0Active = false;
|
||||||
output();
|
output();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool light1Handler(const HomieRange& range, const String& value) {
|
bool lamp1Handler(const HomieRange& range, const String& value) {
|
||||||
Homie.getLogger() << "light1 " << ": " << value << endl;
|
Homie.getLogger() << "lamp1 " << ": " << value << endl;
|
||||||
w1 = value.toInt();
|
lamp1 = value.toInt();
|
||||||
disco = false;
|
lamp1e = value.toInt();
|
||||||
lightNode.setProperty("light1").send(value);
|
lightNode.setProperty("lamp1").send(value);
|
||||||
|
fluorescent1Active = false;
|
||||||
output();
|
output();
|
||||||
return true;
|
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() {
|
void output() {
|
||||||
// * 4 to scale the input up for ESP Arduino default 10 bit PWM
|
// * 4 to scale the input up for ESP Arduino default 10 bit PWM
|
||||||
if (w0 == FULL)
|
analogWrite(PIN_LAMP0_EDGE, constrain(lamp0e * 4,0,1023));
|
||||||
{
|
analogWrite(PIN_LAMP0, constrain(lamp0 * 4,0,1023));
|
||||||
analogWrite(PIN_LIGHT, 1023);
|
analogWrite(PIN_LAMP1_EDGE, constrain(lamp1e * 4,0,1023));
|
||||||
} else {
|
analogWrite(PIN_LAMP1, constrain(lamp1 * 4,0,1023));
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loopHandler()
|
void loopHandler()
|
||||||
{
|
{
|
||||||
if (disco)
|
|
||||||
{
|
|
||||||
if (millis() - lastEvent >= (1000-timeout) || lastEvent == 0) {
|
|
||||||
lastEvent = millis();
|
|
||||||
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++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (fluorescentActive){
|
|
||||||
long _time=millis()-fluorescentLastActivated; //time since activated
|
|
||||||
|
|
||||||
|
|
||||||
//mosquitto_pub -h raum.ctdo.de -t "homie/esp-deckenlicht/strip/fluorescent/set" -m "255"
|
//mosquitto_pub -h raum.ctdo.de -t "homie/esp-deckenlicht/strip/fluorescent/set" -m "255"
|
||||||
|
|
||||||
|
|
||||||
if (millis() > fluorescentLastUpdated + FLUORESCENTUPDATEINTERVAL) { //Update values
|
if (millis() > fluorescentLastUpdated + FLUORESCENTUPDATEINTERVAL) { //Update values
|
||||||
fluorescentLastUpdated = millis();
|
fluorescentLastUpdated = millis();
|
||||||
|
|
||||||
/*
|
if (fluorescent0Active) {
|
||||||
fluorescentTemp+=random(0, 3); //min (inclusive), max (exclusive)
|
//long _time = millis() - fluorescent0LastActivated; //time since activated
|
||||||
fluorescentLastUpdated=millis();
|
|
||||||
|
|
||||||
if (random(0,256)<fluorescentTemp*1.0/FLUORESCENTTEMPMAX*256){ //the warmer, the more often
|
int fluorescentTempIncreaseMax=61-(fluorescent0Age*3);
|
||||||
if (random(0,40)==0){ //ignite
|
fluorescent0Temp +=1+ random(0,fluorescentTempIncreaseMax *fluorescent0Temp/FLUORESCENTTEMPMAX);
|
||||||
fluorescentCurrentBrightness=fluorescentSet/100.0*random(50,100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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 (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
|
if (random(0,80 )==0){ //ignite
|
||||||
fluorescentCurrentBrightness0=fluorescentSet*random(50,100)/100;
|
lamp0=setbrightness0*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 (fluorescent0Temp>200){ //warm enough to glow
|
||||||
if (fluorescentCurrentBrightness0<20){ //if under glow brightness
|
if (lamp0<20){ //if under glow brightness
|
||||||
fluorescentCurrentBrightness0+=5; //start glowing
|
lamp0+=5; //start glowing
|
||||||
}else if(fluorescentCurrentBrightness0>50){ //too bright to glow
|
}else if (lamp0>50){ //too bright for glow
|
||||||
fluorescentCurrentBrightness0-=random(0,30); //reduce intensity
|
lamp0-=random(0,30); //reduce intensity (flashing effect)
|
||||||
}
|
|
||||||
|
|
||||||
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
|
}else{ //not warm enough to glow
|
||||||
if (fluorescentCurrentBrightness0>0){
|
if (lamp0>0){ //too bright for glow
|
||||||
fluorescentCurrentBrightness0-=random(20,50); //reduce intensity
|
lamp0-=random(20,50); //reduce intensity (flashing effect)
|
||||||
}
|
|
||||||
|
|
||||||
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>GLOWBRIGHTNESS){
|
||||||
|
lamp0e=lamp0;
|
||||||
|
}
|
||||||
|
|
||||||
if (fluorescentTemp>=FLUORESCENTTEMPMAX){ //finished
|
if (fluorescent0Temp>=FLUORESCENTTEMPMAX){
|
||||||
fluorescentActive=false;
|
fluorescent0Active=false;
|
||||||
fluorescentCurrentBrightness0=fluorescentSet; //set disired value
|
lamp0=setbrightness0;
|
||||||
fluorescentCurrentBrightness1=fluorescentSet; //set disired value
|
lamp0e=setbrightness0;
|
||||||
fluorescentCurrentBrightness2=fluorescentSet; //set disired value
|
|
||||||
fluorescentCurrentBrightness3=fluorescentSet; //set disired value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fluorescentCurrentBrightness0=_min(255,_max(0,fluorescentCurrentBrightness0));
|
lamp0=constrain(lamp0, 0,255);
|
||||||
fluorescentCurrentBrightness1=_min(255,_max(0,fluorescentCurrentBrightness1));
|
lamp0e=constrain(lamp0e, 0,255);
|
||||||
fluorescentCurrentBrightness2=_min(255,_max(0,fluorescentCurrentBrightness2));
|
|
||||||
fluorescentCurrentBrightness3=_min(255,_max(0,fluorescentCurrentBrightness3));
|
|
||||||
|
|
||||||
w0 = fluorescentCurrentBrightness0;
|
|
||||||
w1 = fluorescentCurrentBrightness1;
|
|
||||||
w2 = fluorescentCurrentBrightness2;
|
|
||||||
w3 = fluorescentCurrentBrightness3;
|
|
||||||
output();
|
output();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
bool sensorValue = debouncer.read();
|
||||||
if (Homie.isConfigured() && Homie.isConnected() && sensorValue != lastSensorValue) {
|
if (Homie.isConfigured() && Homie.isConnected() && sensorValue != lastSensorValue) {
|
||||||
sensorNode.setProperty("motion").send(sensorValue ? "true" : "false");
|
sensorNode.setProperty("motion").send(sensorValue ? "true" : "false");
|
||||||
|
@ -418,10 +276,10 @@ void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Serial << endl << endl;
|
Serial << endl << endl;
|
||||||
|
|
||||||
pinMode(PIN_LIGHT, OUTPUT);
|
pinMode(PIN_LAMP0_EDGE, OUTPUT);
|
||||||
pinMode(PIN_LIGHT1, OUTPUT);
|
pinMode(PIN_LAMP0, OUTPUT);
|
||||||
pinMode(PIN_LIGHT2, OUTPUT);
|
pinMode(PIN_LAMP1_EDGE, OUTPUT);
|
||||||
pinMode(PIN_LIGHT3, OUTPUT);
|
pinMode(PIN_LAMP1, OUTPUT);
|
||||||
|
|
||||||
debouncer.attach(PIN_SENSOR, INPUT);
|
debouncer.attach(PIN_SENSOR, INPUT);
|
||||||
debouncer.interval(50);
|
debouncer.interval(50);
|
||||||
|
@ -431,21 +289,20 @@ void setup() {
|
||||||
Homie_setBrand(FW_NAME);
|
Homie_setBrand(FW_NAME);
|
||||||
Homie.setLoopFunction(loopHandler);
|
Homie.setLoopFunction(loopHandler);
|
||||||
|
|
||||||
lightNode.advertise("speed").settable(speedHandler);
|
lightNode.advertise("lamp").settable(lampHandler);
|
||||||
lightNode.advertise("disco").settable(discoHandler);
|
lightNode.advertise("lamp0").settable(lamp0Handler);
|
||||||
lightNode.advertise("beat").settable(beatHandler);
|
lightNode.advertise("lamp1").settable(lamp1Handler);
|
||||||
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("fluorescent").settable(fluorescentHandler);
|
lightNode.advertise("fluorescent").settable(fluorescentHandler);
|
||||||
lightNode.advertise("fluorescentage").settable(fluorescentAgeHandler);
|
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");
|
sensorNode.advertise("motion");
|
||||||
|
|
||||||
// Activate other PWM frequency. 1000 (1 KHz) is default
|
// Activate other PWM frequency. 1000 (1 KHz) is default
|
||||||
analogWriteFreq(30000);
|
analogWriteFreq(20000);
|
||||||
|
|
||||||
// Restore last state
|
// Restore last state
|
||||||
output();
|
output();
|
||||||
|
|
Loading…
Reference in New Issue