Alternate between 2 pump modes at set interval?

Do you have a question on how to do something.
Ask in here.
Post Reply
meadowsad
Posts: 53
Joined: Sat Jun 15, 2013 9:56 am

Re: Alternate between 2 pump modes at set interval?

Post by meadowsad »

Ok... So after digging through code and trying to wrap my head around what these wave patterns are doing I am making progress. This is what I have so far.

Code: Select all

    byte IntervalMode(byte MinSpeed, byte MaxSpeed, int PulseDuration, byte PumpNumber)
      {
        static int mode;
        byte pspeed=0;
        mode=hour()%2;
        if (mode==0 && PumpNumber==1)
          {
            pspeed=(now()%(PulseDuration*2)<PulseDuration?MinSpeed:MaxSpeed);
            return pspeed;
          }
         if (mode==1 && PumpNumber==1)
           {
             pspeed=MinSpeed;
             return pspeed;
           }
         if (mode==0 && PumpNumber==2)
          {
            pspeed=MinSpeed;
            return pspeed;
           }
         if (mode==1 && PumpNumber==2)
           {
             pspeed=(now()%(PulseDuration*2)<PulseDuration?MinSpeed:MaxSpeed);
             return pspeed;
           }
      }
So I call this with

Code: Select all

ReefAngel.PWM.SetDaylight( IntervalMode( 30, 80, 2, 1));
ReefAngel.PWM.SetActinic( IntervalMode( 30, 80, 2, 2));
What I would like to do is have the mode changed to 0 or 1 by an interval that I can specify when I call this code. For example; I want mode to change every 1min. As it is right now mode is hard coded to change every hour. Any suggestions on how to do this would be greatly appreciated! Also any tips to clean this up or simplify it would be welcomed!
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Alternate between 2 pump modes at set interval?

Post by rimai »

Try this:

Code: Select all

byte IntervalMode(byte MinSpeed, byte MaxSpeed, int PulseDuration, int Interval, boolean PulseSync)
{
  if (now()%(Interval*2)<Interval)
    return PulseSync?LongPulseMode(MinSpeed,MaxSpeed,PulseDuration,true):MinSpeed;
  else
    return PulseSync?MinSpeed:LongPulseMode(MinSpeed,MaxSpeed,PulseDuration,true);
}
Roberto.
Post Reply