Page 1 of 1

New libraries now i have trouble

Posted: Sun Apr 28, 2013 2:19 pm
by johniii
trying to update the time o my dosing pumps and getting an error. Worked fine before the update.

Code: Select all

#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>

////// Place global variable code below here


////// Place global variable code above here


void setup()
{
    // This must be the first line
    ReefAngel.Init();  //Initialize controller
    ReefAngel.AddStandardMenu();  // Add Standard Menu

    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = 0;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = 0;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = Port2Bit | Port4Bit | Port6Bit;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Port2Bit | Port4Bit | Port6Bit | Port7Bit | Port8Bit;
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T1_PROBE;
    ReefAngel.OverheatProbe = T1_PROBE;
    // Set the Overheat temperature setting
    InternalMemory.OverheatTemp_write( 825 );


    // Ports that are always on

    ////// Place additional initialization code below here
    

    ////// Place additional initialization code above here
}
    byte ShortPulseMode(byte PulseMinSpeed, byte PulseMaxSpeed, int PulseDuration, boolean PulseSync)
    {
      byte tspeed=0;
      PulseMinSpeed=constrain(PulseMinSpeed,30,100);
      PulseMaxSpeed=constrain(PulseMaxSpeed,30,100);
      tspeed=(millis()%(PulseDuration*2)<PulseDuration?PulseMinSpeed:PulseMaxSpeed);
      if (PulseSync)
        return tspeed;
      else
        return (tspeed==PulseMinSpeed)?PulseMaxSpeed:PulseMinSpeed;
    }
    byte LongPulseMode(byte PulseMinSpeed, byte PulseMaxSpeed, int PulseDuration, boolean PulseSync)
    {
      byte tspeed=0;
      PulseMinSpeed=constrain(PulseMinSpeed,30,100);
      PulseMaxSpeed=constrain(PulseMaxSpeed,30,100);
      tspeed=(now()%(PulseDuration*2)<PulseDuration?PulseMinSpeed:PulseMaxSpeed);
      if (PulseSync)
        return tspeed;
      else
        return (tspeed==PulseMinSpeed)?PulseMaxSpeed:PulseMinSpeed;
    }
    byte SineMode(byte PulseMinSpeed, byte PulseMaxSpeed, int PulseDuration, boolean PulseSync) {
      double x,y;

      x=double(now()%(PulseDuration));
      x/=PulseDuration;
      x*=2.0*PI;
      if (!PulseSync) x+=PI; // shift the sine wave for the right pump

      y=sin(x);// y is now between -1 and 1
      y+=1.0; // y is now between 0 and 2
      y/=2.0; // y is now between 0 and 1 
     
      // now compute the tunze speed
      y*=double(PulseMaxSpeed-PulseMinSpeed);
      y+=double(PulseMinSpeed);
     
      y+=0.5; // for proper rounding
     
      // y is now between PulseMinSpeed and PulseMaxSpeed, constrain for safety 
      return constrain(byte(y),30,100);
    }
    byte ReefCrestMode(byte WaveSpeed, byte WaveOffset, boolean PulseSync)
    {
      static unsigned long lastwavemillis=millis();
      static int newspeed=WaveSpeed;
      if ((millis()-lastwavemillis) > 5000)
      {
        if (random(100)<50) newspeed--; else newspeed++;
        newspeed=constrain(newspeed,WaveSpeed-WaveOffset,WaveSpeed+WaveOffset);
        newspeed=constrain(newspeed,0,100);
        lastwavemillis=millis();
      } 
      if (PulseSync)
        return newspeed;
      else
        return WaveSpeed-(newspeed-WaveSpeed);
    }
    byte NutrientTransportMode(byte PulseMinSpeed, byte PulseMaxSpeed, int PulseDuration, boolean PulseSync)
    {
      static unsigned long lastwavemillis=millis();
      static byte WavePhase=0;
      static time_t WaveStart=0;
      static byte speed=PulseMinSpeed;
      static byte anti_speed=PulseMinSpeed;

      if (WavePhase==0)
      {
        WavePhase++;
        WaveStart=now();
      }
      else if (WavePhase==1)
      {
        if (now()-WaveStart>2700)
        {
          WavePhase++;
        }
        if ((millis()-lastwavemillis) > PulseDuration)
        {
          if (speed==PulseMinSpeed)
          { 
            speed=PulseMaxSpeed;
            anti_speed=PulseMinSpeed;
          }
          else
          {
            speed=PulseMinSpeed;
            anti_speed=PulseMaxSpeed;
          }
          lastwavemillis=millis();
        }
      }
      else if (WavePhase==2)
      {
        if (now()-WaveStart>4500) WavePhase++;
        if (now()-WaveStart<=2760)
          speed=PulseMinSpeed;
        else
          speed=PulseMaxSpeed;
        if (now()-WaveStart<=3300)
          anti_speed=PulseMinSpeed;
        else
          anti_speed=PulseMaxSpeed*sin(radians(map(now()-WaveStart,3300,4500,0,180)));
      }
      else if (WavePhase==3)
      {
        if (now()-WaveStart>7200) WavePhase++;
        if ((millis()-lastwavemillis) > PulseDuration)
        {
          if (speed==PulseMinSpeed)
          { 
            speed=PulseMaxSpeed;
            anti_speed=PulseMinSpeed;
          }
          else
          {
            speed=PulseMinSpeed;
            anti_speed=PulseMaxSpeed;
          }
          lastwavemillis=millis();
        }
      }
      else if (WavePhase==4)
      {
        if (now()-WaveStart>9000) WavePhase=0;
        if (now()-WaveStart<=7260)
          speed=PulseMinSpeed;
        else
          speed=PulseMaxSpeed;
        if (now()-WaveStart<=8400)
          anti_speed=PulseMaxSpeed*sin(radians(map(now()-WaveStart,7200,8400,0,180)));
        else
          anti_speed=0;
      }
      if (PulseSync)
        return speed;
      else
        return anti_speed;
    }
    byte TidalSwellMode(byte WaveMaxSpeed, boolean PulseSync)
    {
      static unsigned long lastwavemillis=millis();
      static byte WavePhase=0;
      static time_t WaveStart=0;
      static byte speed=0;
      static byte anti_speed=0;

      if (WavePhase==0)
      {
        WavePhase++;
        WaveStart=now();
      }
      else if (WavePhase==1)
      {
        if (now()-WaveStart>900) WavePhase++;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,0,900,0,90))))/10;
        speed+=WaveMaxSpeed/2;

        anti_speed=(WaveMaxSpeed*2*sin(radians(map(now()-WaveStart,0,900,0,90))))/5;
        anti_speed+=WaveMaxSpeed/2;
      }
      else if (WavePhase==2)
      {
        if (now()-WaveStart>1800) WavePhase++;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,900,1800,90,180))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=WaveMaxSpeed/20;

        anti_speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,900,1800,90,180))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=WaveMaxSpeed/4;

      }
      else if (WavePhase==3)
      {
        if (now()-WaveStart>2700) WavePhase++;
        speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,1800,2700,0,90))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=WaveMaxSpeed/20;

        anti_speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,1800,2700,0,90))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=WaveMaxSpeed/4;
      }
      else if (WavePhase==4)
      {
        if (now()-WaveStart>3600) WavePhase++;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,2700,3600,90,180))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*3)/20;

        anti_speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,2700,3600,90,180))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=(WaveMaxSpeed*3)/20;
      }
      else if (WavePhase==5)
      {
        if (now()-WaveStart>4500) WavePhase++;
        speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,3600,4500,0,90))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*3)/20;

        anti_speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,3600,4500,0,90))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=(WaveMaxSpeed*3)/20;
      }
      else if (WavePhase==6)
      {
        if (now()-WaveStart>5400) WavePhase++;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,4500,5400,90,180))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*5)/20;

        anti_speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,4500,5400,90,180))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=WaveMaxSpeed/20;
      }
      else if (WavePhase==7)
      {
        if (now()-WaveStart>6300) WavePhase++;
        speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,5400,6300,0,90))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*5)/20;

        anti_speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,5400,6300,0,90))))/20;
        anti_speed+=WaveMaxSpeed/2;
        anti_speed+=WaveMaxSpeed/20;
      }
      else if (WavePhase==8)
      {
        if (now()-WaveStart>7200) WavePhase++;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,6300,7200,90,180))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*7)/20;

        anti_speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,6300,7200,90,180))))/10;
        anti_speed+=WaveMaxSpeed/2;
      }
      else if (WavePhase==9)
      {
        if (now()-WaveStart>8100) WavePhase++;
        speed=(WaveMaxSpeed*3*sin(radians(map(now()-WaveStart,7200,8100,0,90))))/20;
        speed+=WaveMaxSpeed/2;
        speed+=(WaveMaxSpeed*7)/20;

        anti_speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,7200,8100,0,90))))/2;
        anti_speed+=WaveMaxSpeed/2;
      }
      else if (WavePhase==10)
      {
        if (now()-WaveStart>9000) WavePhase=0;
        speed=(WaveMaxSpeed*sin(radians(map(now()-WaveStart,8100,9000,90,180))))/2;
        speed+=WaveMaxSpeed/2;

        anti_speed=speed;
      }

      if (PulseSync)
        return speed;
      else
        return anti_speed;
    }
    byte TideMode(byte WaveSpeed, byte minOffset, byte maxOffset)
    {
      // Contribution of lnevo
      double moonOffset; // gap between high and low
      double amplitude;  // tide curve
      double wavelength=12*SECS_PER_HOUR;

      // Calculate the gap between high and low tide based on MoonPhase()
      moonOffset=cos(((2*PI)/100)*MoonPhase());
      moonOffset=((moonOffset+1)/2)*100; // Convert to percentage

      // Find out the current tidal height
      amplitude=sin(((2*PI)/wavelength)*now());

      moonOffset=map(moonOffset,0,100,minOffset,maxOffset);
      amplitude=amplitude*moonOffset;

      // Adjust the calculate speed to be in our adjusted range
      return constrain(WaveSpeed+amplitude,0,100);
    }

void loop()
{
    ReefAngel.SingleATO( true,Port1,120,0 );
    ReefAngel.StandardLights( Port2,14,0,22,0 );
    ReefAngel.DosingPumpRepeat( Port3,0,60,240 );
    ReefAngel.StandardLights( Port4,14,0,22,0 );
    ReefAngel.DosingPumpRepeat( Port5,30,60,240 );
    ReefAngel.StandardLights( Port6,14,0,22,0 );
    ReefAngel.StandardHeater( Port7,785,788 );
    ReefAngel.StandardHeater( Port8,785,788 );
    ////// Place your custom code below here
    ReefAngel.PWM.SetDaylight( ReefCrestMode(35,15,true) );
    ReefAngel.PWM.SetActinic( ReefCrestMode(35,15,false) );
    ////// Place your custom code above here

    // This should always be the last line
    ReefAngel.ShowInterface();
}

Posted: Sun Apr 28, 2013 2:22 pm
by binder
did you read the post about upgrading the libraries and the file that needs updated?

Posted: Sun Apr 28, 2013 2:23 pm
by binder

Re: New libraries now i have trouble

Posted: Sun Apr 28, 2013 2:45 pm
by johniii
did That
error is

Globals\Globals.cpp.o: In function 'LongPulseMode (unsigned char, unsigned char, int, unsigned char)':
C:\Users]Sabrina\Documents\Arduino\libraries\Globals/Globals.cpp: 265: multiple definition of 'LongPulseMode (unsigned char, unsigned char, int, unsigned char)'


it does the above for all wave modes in the code

Re: New libraries now i have trouble

Posted: Sun Apr 28, 2013 2:58 pm
by johniii
I'll try a clean install in a while

Re: New libraries now i have trouble

Posted: Sun Apr 28, 2013 4:05 pm
by johniii
from checking global.cpp it seems the wave functions were added there. So do i not have to code them in anymore

Re: New libraries now i have trouble

Posted: Sun Apr 28, 2013 4:20 pm
by johniii
ok just uploaded like this

Code: Select all

#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>

////// Place global variable code below here


////// Place global variable code above here


void setup()
{
    // This must be the first line
    ReefAngel.Init();  //Initialize controller
    ReefAngel.AddStandardMenu();  // Add Standard Menu

    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = 0;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = 0;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = Port2Bit | Port4Bit | Port6Bit;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Port2Bit | Port4Bit | Port6Bit | Port7Bit | Port8Bit;
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T1_PROBE;
    ReefAngel.OverheatProbe = T1_PROBE;
    // Set the Overheat temperature setting
    InternalMemory.OverheatTemp_write( 825 );


    // Ports that are always on

    ////// Place additional initialization code below here
    

    ////// Place additional initialization code above here
}
   
    

void loop()
{
    ReefAngel.SingleATO( true,Port1,120,0 );
    ReefAngel.StandardLights( Port2,14,0,22,0 );
    ReefAngel.DosingPumpRepeat( Port3,0,60,240 );
    ReefAngel.StandardLights( Port4,14,0,22,0 );
    ReefAngel.DosingPumpRepeat( Port5,30,60,240 );
    ReefAngel.StandardLights( Port6,14,0,22,0 );
    ReefAngel.StandardHeater( Port7,785,788 );
    ReefAngel.StandardHeater( Port8,785,788 );
    ////// Place your custom code below here
    ReefAngel.PWM.SetDaylight( ReefCrestMode(35,15,true) );
    ReefAngel.PWM.SetActinic( ReefCrestMode(35,15,false) );
    ////// Place your custom code above here

    // This should always be the last line
    ReefAngel.ShowInterface();
}[code]  

works fine.  The wave modes are in the global.cpp
all we have to do now is call the mode