new fluorescent algorithm
This commit is contained in:
parent
c9973d111c
commit
40d1f31a17
|
@ -3,6 +3,8 @@
|
|||
|
||||
//curl -X PUT http://homie.config/config -d @config.json --header "Content-Type: application/json"
|
||||
|
||||
// homie/ledstoffroehre/lamp/fluorescent0/set
|
||||
|
||||
#define PIN_LAMP0_EDGE D5
|
||||
#define PIN_LAMP0 D6
|
||||
#define PIN_LAMP1_EDGE D7
|
||||
|
@ -33,13 +35,29 @@ int setbrightness0 = 0;
|
|||
int setbrightness1 = 0;
|
||||
bool fluorescent0Active=false;
|
||||
bool fluorescent1Active=false;
|
||||
int fluorescent0Age=10;
|
||||
int fluorescent1Age=10;
|
||||
#define FLUORESCENTAGEMAX 20
|
||||
int fluorescent0Quality=50; // 0 to 100
|
||||
int fluorescent1Quality=50;
|
||||
#define FLUORESCENQUALITYMAX 100
|
||||
#define FLUORESCENTTEMPMAX 1000
|
||||
int fluorescent0Temp=0;
|
||||
int fluorescent1Temp=0;
|
||||
#define GLOWBRIGHTNESS 5
|
||||
#define GLOWBRIGHTNESS 10
|
||||
|
||||
|
||||
int flashprobability0=300; //the higher the lesser
|
||||
int flashprobabilitymin0=100; //the higher the lesser (at peak)
|
||||
int tempincreasemax0=10; //the higher the faster lightup
|
||||
|
||||
int flashprobability1=300; //the higher the lesser
|
||||
int flashprobabilitymin1=100; //the higher the lesser (at peak)
|
||||
int tempincreasemax1=10; //the higher the faster lightup
|
||||
|
||||
#define FLASHPROBABILITY_MIN 100
|
||||
#define FLASHPROBABILITY_MAX 600
|
||||
#define FLASHPROBABILITYMIN_MIN 50
|
||||
#define FLASHPROBABILITYMIN_MAX 100 //should not be more than FLASHPROBABILITY_MIN
|
||||
#define TEMPINCREASEMAX_MIN 5
|
||||
#define TEMPINCREASEMAX_MAX FLUORESCENTTEMPMAX/10
|
||||
|
||||
|
||||
bool lastSensorValue = false;
|
||||
|
@ -59,14 +77,8 @@ bool fluorescentHandler(const HomieRange& range, const String& value) {
|
|||
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;
|
||||
resetLamp0();
|
||||
resetLamp1();
|
||||
} else { //turned on
|
||||
//Initialization
|
||||
fluorescent0Active = true; //start effect
|
||||
|
@ -82,10 +94,7 @@ bool fluorescent0Handler(const HomieRange& range, const String& value) {
|
|||
fluorescent0Temp=0;
|
||||
|
||||
if (setbrightness0 == 0) { // turned off
|
||||
fluorescent0Active = false; //set effect off
|
||||
fluorescent0LastActivated = millis();
|
||||
lamp0e=0;
|
||||
lamp0 = 0;
|
||||
resetLamp0();
|
||||
} else { //turned on
|
||||
//Initialization
|
||||
fluorescent0Active = true; //start effect
|
||||
|
@ -100,10 +109,7 @@ bool fluorescent1Handler(const HomieRange& range, const String& value) {
|
|||
fluorescent1Temp=0;
|
||||
|
||||
if (setbrightness1 == 0) { // turned off
|
||||
fluorescent1Active = false; //set effect off
|
||||
fluorescent1LastActivated = millis();
|
||||
lamp1e=0;
|
||||
lamp1 = 0;
|
||||
resetLamp1();
|
||||
} else { //turned on
|
||||
//Initialization
|
||||
fluorescent1Active = true; //start effect
|
||||
|
@ -112,20 +118,42 @@ bool fluorescent1Handler(const HomieRange& range, const String& value) {
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
void resetLamp0(){
|
||||
fluorescent0Active = false; //set effect off
|
||||
fluorescent0LastActivated = millis();
|
||||
lamp0e=0;
|
||||
lamp0=0;
|
||||
float speedpercent=fluorescent0Quality*1.0/FLUORESCENQUALITYMAX;
|
||||
flashprobability0=random(FLASHPROBABILITY_MIN,FLASHPROBABILITY_MAX);
|
||||
flashprobabilitymin0=random(FLASHPROBABILITYMIN_MIN,FLASHPROBABILITYMIN_MAX);
|
||||
tempincreasemax0=TEMPINCREASEMAX_MIN+speedpercent*(TEMPINCREASEMAX_MAX-TEMPINCREASEMAX_MIN);//random(TEMPINCREASEMAX_MIN,TEMPINCREASEMAX_MAX);
|
||||
}
|
||||
void resetLamp1(){
|
||||
fluorescent1Active = false; //set effect off
|
||||
fluorescent1LastActivated = millis();
|
||||
lamp1e=0;
|
||||
lamp1=0;
|
||||
float speedpercent=fluorescent1Quality*1.0/FLUORESCENQUALITYMAX;
|
||||
flashprobability1=random(FLASHPROBABILITY_MIN,FLASHPROBABILITY_MAX);
|
||||
flashprobabilitymin1=random(FLASHPROBABILITYMIN_MIN,FLASHPROBABILITYMIN_MAX);
|
||||
tempincreasemax0=TEMPINCREASEMAX_MIN+speedpercent*(TEMPINCREASEMAX_MAX-TEMPINCREASEMAX_MIN);
|
||||
}
|
||||
|
||||
bool fluorescentAgeHandler(const HomieRange& range, const String& value) {
|
||||
Homie.getLogger() << "fluorescentAge " << ": " << value << endl;
|
||||
fluorescent0Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||
fluorescent1Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||
fluorescent0Quality = constrain(value.toInt(),0,FLUORESCENQUALITYMAX);
|
||||
fluorescent1Quality = constrain(value.toInt(),0,FLUORESCENQUALITYMAX);
|
||||
return true;
|
||||
}
|
||||
bool fluorescent0AgeHandler(const HomieRange& range, const String& value) {
|
||||
Homie.getLogger() << "fluorescent0Age " << ": " << value << endl;
|
||||
fluorescent0Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||
bool fluorescent0QualityHandler(const HomieRange& range, const String& value) {
|
||||
Homie.getLogger() << "fluorescent0Quality " << ": " << value << endl;
|
||||
fluorescent0Quality = constrain(value.toInt(),0,FLUORESCENQUALITYMAX);
|
||||
return true;
|
||||
}
|
||||
bool fluorescent1AgeHandler(const HomieRange& range, const String& value) {
|
||||
Homie.getLogger() << "fluorescent1Age " << ": " << value << endl;
|
||||
fluorescent1Age = constrain(value.toInt(),0,FLUORESCENTAGEMAX);
|
||||
bool fluorescent1QualityHandler(const HomieRange& range, const String& value) {
|
||||
Homie.getLogger() << "fluorescent1Quality " << ": " << value << endl;
|
||||
fluorescent1Quality = constrain(value.toInt(),0,FLUORESCENQUALITYMAX);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -175,7 +203,7 @@ void output() {
|
|||
|
||||
void loopHandler()
|
||||
{
|
||||
//mosquitto_pub -h raum.ctdo.de -t "homie/esp-deckenlicht/strip/fluorescent/set" -m "255"
|
||||
//mosquitto_pub -h raum.ctdo.de -t "homie/ledstoffroehre/lamp/fluorescent0/set" -m "255"
|
||||
|
||||
|
||||
if (millis() > fluorescentLastUpdated + FLUORESCENTUPDATEINTERVAL) { //Update values
|
||||
|
@ -184,27 +212,20 @@ void loopHandler()
|
|||
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;
|
||||
fluorescent0Temp+=random(1,tempincreasemax0);
|
||||
if (random(0,flashprobability0-constrain(fluorescent0Temp*flashprobability0/FLUORESCENTTEMPMAX,0,flashprobability0-flashprobabilitymin0))==0)
|
||||
{
|
||||
lamp0=setbrightness0*random(30,100)/10;
|
||||
lamp0e=lamp0; //flash everything
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}else{ //not warm enough to glow
|
||||
if (lamp0>0){ //too bright for glow
|
||||
lamp0-=random(20,50); //reduce intensity (flashing effect)
|
||||
}
|
||||
lamp0-=40;
|
||||
if (random(0,100)>95){
|
||||
lamp0e+=constrain(random(0,fluorescent0Temp*10/FLUORESCENTTEMPMAX) , 0, 10); //start glowing slowly
|
||||
}
|
||||
|
||||
if(lamp0>GLOWBRIGHTNESS){
|
||||
lamp0e=lamp0;
|
||||
|
||||
if (lamp0e>GLOWBRIGHTNESS)
|
||||
{
|
||||
lamp0e-=constrain(lamp0e-GLOWBRIGHTNESS,0,20); //make sides darker until glowbrightness
|
||||
}
|
||||
|
||||
if (fluorescent0Temp>=FLUORESCENTTEMPMAX){
|
||||
|
@ -219,32 +240,24 @@ void loopHandler()
|
|||
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;
|
||||
fluorescent1Temp+=random(1,tempincreasemax1);
|
||||
if (random(0,flashprobability1-constrain(fluorescent1Temp*flashprobability1/FLUORESCENTTEMPMAX,0,flashprobability1-flashprobabilitymin1))==0)
|
||||
{
|
||||
lamp1=setbrightness1*random(30,100)/10;
|
||||
lamp1e=lamp1; //flash everything
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
lamp1-=40;
|
||||
if (random(0,100)>95){
|
||||
lamp1e+=constrain(random(0,fluorescent1Temp*10/FLUORESCENTTEMPMAX) , 0, 10); //start glowing slowly
|
||||
}
|
||||
|
||||
if(lamp1>GLOWBRIGHTNESS){
|
||||
lamp1e=lamp1;
|
||||
|
||||
if (lamp1e>GLOWBRIGHTNESS)
|
||||
{
|
||||
lamp1e-=constrain(lamp1e-GLOWBRIGHTNESS,0,20); //make sides darker until glowbrightness
|
||||
}
|
||||
|
||||
if (fluorescent1Temp>=FLUORESCENTTEMPMAX){
|
||||
|
@ -253,12 +266,12 @@ void loopHandler()
|
|||
lamp1e=setbrightness1;
|
||||
}
|
||||
|
||||
|
||||
lamp1=constrain(lamp1, 0,255);
|
||||
lamp1e=constrain(lamp1e, 0,255);
|
||||
output();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -295,9 +308,9 @@ void setup() {
|
|||
lightNode.advertise("fluorescent").settable(fluorescentHandler);
|
||||
lightNode.advertise("fluorescentage").settable(fluorescentAgeHandler);
|
||||
lightNode.advertise("fluorescent0").settable(fluorescent0Handler);
|
||||
lightNode.advertise("fluorescent0age").settable(fluorescent0AgeHandler);
|
||||
lightNode.advertise("fluorescent0Quality").settable(fluorescent0QualityHandler);
|
||||
lightNode.advertise("fluorescent1").settable(fluorescent1Handler);
|
||||
lightNode.advertise("fluorescent1age").settable(fluorescent1AgeHandler);
|
||||
lightNode.advertise("fluorescent1Quality").settable(fluorescent1QualityHandler);
|
||||
|
||||
sensorNode.advertise("motion");
|
||||
|
||||
|
|
|
@ -17,15 +17,48 @@ clock = pygame.time.Clock()
|
|||
import time
|
||||
|
||||
|
||||
FLUORESCENTTEMPMAX=400
|
||||
|
||||
fluorescentCurrentBrightness=0
|
||||
fluorescentTemp=0
|
||||
fluorescentActive=True
|
||||
lamp0e=0
|
||||
lamp0=0
|
||||
lamp1e=0
|
||||
lamp1=0
|
||||
|
||||
|
||||
fluorescentSet=255
|
||||
setbrightness0 = 0
|
||||
#setbrightness1 = 0;
|
||||
fluorescent0Active=False
|
||||
#fluorescent1Active=False;
|
||||
fluorescent0Age=10
|
||||
#fluorescent1Age=10;
|
||||
FLUORESCENTAGEMAX= 20
|
||||
FLUORESCENTTEMPMAX= 1000
|
||||
fluorescent0Temp=0
|
||||
#fluorescent1Temp=0;
|
||||
GLOWBRIGHTNESS= 50
|
||||
|
||||
flashprobability0=300 #the higher the lesser
|
||||
flashprobabilitymin0=100 #the higher the lesser (at peak)
|
||||
tempincreasemax0=10 #the higher the faster lightup
|
||||
|
||||
FLASHPROBABILITY_MIN=200
|
||||
FLASHPROBABILITY_MAX=600
|
||||
FLASHPROBABILITYMIN_MIN=100
|
||||
FLASHPROBABILITYMIN_MAX=150
|
||||
TEMPINCREASEMAX_MIN=5
|
||||
TEMPINCREASEMAX_MAX=15
|
||||
|
||||
|
||||
flashprobability0=random.randint(FLASHPROBABILITY_MIN,FLASHPROBABILITY_MAX)
|
||||
flashprobabilitymin0=random.randint(FLASHPROBABILITYMIN_MIN,FLASHPROBABILITYMIN_MAX)
|
||||
tempincreasemax0=random.randint(TEMPINCREASEMAX_MIN,TEMPINCREASEMAX_MAX)
|
||||
|
||||
|
||||
|
||||
fluorescent0Active=True #start
|
||||
setbrightness0=255
|
||||
|
||||
|
||||
def constrain(val, min_val, max_val):
|
||||
return min(max_val, max(min_val, val))
|
||||
|
||||
# Loop as long as done == False
|
||||
while not done:
|
||||
|
@ -35,73 +68,35 @@ while not done:
|
|||
if event.type == pygame.QUIT: # If user clicked close
|
||||
done = True # Flag that we are done so we exit this loop
|
||||
|
||||
|
||||
|
||||
if (fluorescent0Active):
|
||||
fluorescent0Temp+=random.randint(1,tempincreasemax0)
|
||||
if (random.randint(0,flashprobability0-constrain(fluorescent0Temp*flashprobability0/FLUORESCENTTEMPMAX,0,flashprobability0-flashprobabilitymin0))==0):
|
||||
lamp0=setbrightness0*random.randint(30,100)/10
|
||||
lamp0e=lamp0 #flash everything
|
||||
lamp0-=20
|
||||
lamp0e+=constrain(random.randint(-10,fluorescent0Temp*10/FLUORESCENTTEMPMAX) , 0, 10) #start glowing slowly
|
||||
if (lamp0e>GLOWBRIGHTNESS):
|
||||
lamp0e-=constrain(lamp0e-GLOWBRIGHTNESS,0,20) #make sides darker until glowbrightness
|
||||
|
||||
|
||||
if fluorescent0Temp>=FLUORESCENTTEMPMAX:
|
||||
fluorescent0Active=False
|
||||
fluorescent0Temp=0
|
||||
lamp0=setbrightness0
|
||||
lamp0e=setbrightness0
|
||||
print("finished")
|
||||
|
||||
'''
|
||||
if (fluorescentActive):
|
||||
fluorescentTemp+=random.randint(0,3 +1)
|
||||
|
||||
if (random.randint(0, 256+1) < fluorescentTemp*1.0/FLUORESCENTTEMPMAX*256):
|
||||
if (random.randint(0, 40+1) ==0): #ignite
|
||||
fluorescentCurrentBrightness=fluorescentSet*random.randint(50,100)/100
|
||||
|
||||
if (random.randint(0, 256+1) > fluorescentTemp*1.0/FLUORESCENTTEMPMAX*256):
|
||||
if (fluorescentCurrentBrightness<5):
|
||||
if (random.randint(0,50 +1)==0): #ignite
|
||||
fluorescentCurrentBrightness=fluorescentSet*random.randint(50,100)/100
|
||||
if (fluorescentCurrentBrightness>20):
|
||||
fluorescentCurrentBrightness-=30
|
||||
|
||||
if (fluorescentTemp>=FLUORESCENTTEMPMAX):
|
||||
fluorescentActive=False
|
||||
fluorescentCurrentBrightness=fluorescentSet
|
||||
lamp0=constrain(int(lamp0),0,255)
|
||||
lamp0e=constrain(int(lamp0e),0,255)
|
||||
clamp0 = (lamp0,lamp0,lamp0)
|
||||
clamp0e = (lamp0e,lamp0e,lamp0e)
|
||||
|
||||
|
||||
if (fluorescentCurrentBrightness>255):
|
||||
fluorescentCurrentBrightness=255
|
||||
if (fluorescentCurrentBrightness<0):
|
||||
fluorescentCurrentBrightness=0
|
||||
|
||||
COLOR = (fluorescentCurrentBrightness,fluorescentCurrentBrightness,fluorescentCurrentBrightness)
|
||||
else:
|
||||
COLOR = (fluorescentSet,fluorescentSet,fluorescentSet)
|
||||
'''
|
||||
|
||||
|
||||
if (fluorescentActive):
|
||||
fluorescentTemp+=1+ random.randint(0,20* fluorescentTemp/FLUORESCENTTEMPMAX)
|
||||
#fluorescentTemp+=3
|
||||
|
||||
|
||||
if (random.randint(0,80 +1)==0): #ignite
|
||||
fluorescentCurrentBrightness=fluorescentSet*random.randint(50,100)/100
|
||||
|
||||
if (fluorescentTemp>200): #warm enough to glow
|
||||
if (fluorescentCurrentBrightness<20): #if under glow brightness
|
||||
fluorescentCurrentBrightness+=5 #start glowing
|
||||
elif (fluorescentCurrentBrightness>50): #too bright for glow
|
||||
fluorescentCurrentBrightness-=random.randint(0,30) #reduce intencity (flashing effect)
|
||||
else: #not warm enough to glow
|
||||
if (fluorescentCurrentBrightness>0): #too bright for glow
|
||||
fluorescentCurrentBrightness-=random.randint(20,50) #reduce intencity (flashing effect)
|
||||
|
||||
if (fluorescentTemp>=FLUORESCENTTEMPMAX):
|
||||
fluorescentActive=False
|
||||
fluorescentCurrentBrightness=fluorescentSet
|
||||
print("Finished")
|
||||
|
||||
if (fluorescentCurrentBrightness>255):
|
||||
fluorescentCurrentBrightness=255
|
||||
if (fluorescentCurrentBrightness<0):
|
||||
fluorescentCurrentBrightness=0
|
||||
|
||||
COLOR = (fluorescentCurrentBrightness,fluorescentCurrentBrightness,fluorescentCurrentBrightness)
|
||||
else:
|
||||
COLOR = (fluorescentSet,fluorescentSet,fluorescentSet)
|
||||
|
||||
|
||||
screen.fill(COLOR)
|
||||
screen.fill(clamp0) #center
|
||||
pygame.draw.rect(screen,clamp0e,(0,0,20,size[1])) #left edge
|
||||
pygame.draw.rect(screen,clamp0e,(size[0]-20,0,20,size[1]))#right edge
|
||||
|
||||
pygame.display.flip()
|
||||
|
||||
|
|
Loading…
Reference in New Issue