hedrickms code
Re: hedrickms code
I like this! This should be a library, no ?
Re: hedrickms code
Does anyone know why the random(7) function would always select #5 when the controller reboots? I am not sure if it is always doing this yet (cause I rebooted everyday) but my pumps are not switching modes during the day.
Ideas?
code below:
Ideas?
code below:
Code: Select all
void JebaoMode()
{
static boolean feedingalert = false;
static boolean pumpstormalert = false;
static unsigned long isfeeding;
static int ranMode = random (9);
static WiFiAlert pumpAlert;
if (ReefAngel.DCPump.Mode == Custom)
{
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
isfeeding = now();
feedingalert = false; //reset feeding flag so alert can be sent if needed
}
if (now()-isfeeding<5400) // Continue for the 90 minutes
{
if (!feedingalert)
{
pumpAlert.Send("Pump+Mode+NTM+Feeding!+Activated.");
feedingalert = true;
}
ReefAngel.PWM.SetDaylight( NutrientTransportMode(30,70,140,true));
ReefAngel.PWM.SetActinic( NutrientTransportMode(30,70,140,false));
}
else if ((now()%SECS_PER_DAY >= 82800) || (now()%SECS_PER_DAY < 28800)) // night mode 11pm -> 8am
{
if (now()%SECS_PER_DAY == 82800) pumpstormalert = false; //reset pump flag so alert can be sent if needed
if (!pumpstormalert)
{
pumpAlert.Send("Pump+Mode+Sine+NightMode!+Activated.");
pumpstormalert = true;
}
ReefAngel.PWM.SetDaylight(SineMode(30,50,20, true));
ReefAngel.PWM.SetActinic(SineMode(30,50,20, false));
}// end night mode 8am
else // choose a random pump mode (ReefCrest, TidalSwell, ShortPulse, LongPulse, Else) between 0 and 8
{
if (now()%SECS_PER_DAY == 28800)//at 8am set pump mode and determine if storm
{
pumpstormalert = false; //reset pump flag so alert can be sent if needed
//set random pump mode at start of each day (midnight) and determine if storm will occur
ranMode = random(30);
if (ranMode!=29 || ranMode!=17) ranMode = random (9);//if not storm set normal random pump mode
}
if (ranMode==29 || ranMode==17)//storm mode
{
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+STORM!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
StormMode();
}
else
{
switch (ranMode)
{
case 0:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+ShortPule+case0!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetActinic( ShortPulseMode(0,60,400,true) );
ReefAngel.PWM.SetDaylight( ShortPulseMode(0,60,400,false) );
break;
case 1:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+ReefCrest+case1!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( ReefCrestMode(50,20,true) );
ReefAngel.PWM.SetActinic( ReefCrestMode(50,20,false) );
break;
case 2:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+TidalSwell+case2!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( TidalSwellMode(70,true) );
ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) );
break;
case 3:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+TidalSwell+case3!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( TidalSwellMode(50,true) );
ReefAngel.PWM.SetActinic( TidalSwellMode(50,false) );
break;
case 4:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+TideMode+case4!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( TideMode(50,30,70) );
ReefAngel.PWM.SetActinic( TideMode(50,30,70) );
break;
case 5:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+LongPulse+case5!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( LongPulseMode(20,60,10,true) );
ReefAngel.PWM.SetActinic( LongPulseMode(20,60,10,false) );
break;
case 6:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+ElseMode+case6!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight( ElseMode(50,30,true) );
ReefAngel.PWM.SetActinic( ElseMode(50,30,false) );
break;
case 7:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+SineWave+case7!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetDaylight(SineMode(40,70,20, true));
ReefAngel.PWM.SetActinic(SineMode(40,70,20, false));
break;
case 8:
if (!pumpstormalert)
{
//enter storm mode for pumps (random)
pumpAlert.Send("Pump+Mode+ShortPule+case8!+Activated.");
pumpstormalert = true; //reset pump flag so alert can be sent if needed
}
ReefAngel.PWM.SetActinic( ShortPulseMode(10,50,600,true) );
ReefAngel.PWM.SetDaylight( ShortPulseMode(10,50,600,false) );
break;
}//end of random pump mode
}//end else switch
}//end else pump mode
} //end of DCPump custom
} // End Void JebaoRandomMode()
Re: hedrickms code
Because random() isn't seed'ed by default. So if you were troubleshooting something, you'd always have the same stream of random numbers. You will need to seed it with something that would also change, like the current time.
This is what I have:
randomSeed(now()/SECS_PER_DAY);
This is what I have:
randomSeed(now()/SECS_PER_DAY);
Re: hedrickms code
Ahh... got it. Thanks a bunch. Do you seed under Setup ()?
Re: hedrickms code
Awesome... Thanks again!
I should have checked there first (my apologies). Sometimes I get a little trigger happy
I should have checked there first (my apologies). Sometimes I get a little trigger happy
Re: hedrickms code
ok code updated on first post to include fixes to random mode (thanks Lee!). Everything seems to be working.
Re: hedrickms code
Awesome! Now comes the incessant tweaking and feature adding.
Re: hedrickms code
Already planning the next mod
P.S. I already had to order a new cable -- all the constant updates ended up pulling/breaking the terminal ends on the cable.
P.S. I already had to order a new cable -- all the constant updates ended up pulling/breaking the terminal ends on the cable.
Re: hedrickms code
You may want to consider ordering the bluetooth module
Re: hedrickms code
I'm seriously thinking about it. Is the bluetooth module easy to setup and use?
Does anyone know a good/cheap bluetooth adapter for a windows 8 (cheapo) laptop?
Does anyone know a good/cheap bluetooth adapter for a windows 8 (cheapo) laptop?