Help with code

Do you have a question on how to do something.
Ask in here.
Post Reply
Drs1210

Help with code

Post by Drs1210 »

I just changed my display, but I'm having a few problems with it. For one, one of my relay box's on the screen is flickering. The other thing is that I have in my code where its suppose to display what mode my wp40 is in, but its shown where the date and time is at. Can anybody help me with 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 <Humidity.h>
#include <DCPump.h>
#include <ReefAngel.h>

// Define Relay Ports by Name
#define KalkDoser          1
#define WCEmpty            2
#define Autotopoff         3
#define Refugium           4
#define KalkStirrer        5
#define WCFill             6
#define Heater             7
#define Return             8

#define RODIValve          Box1_Port1
#define Skimmer            Box1_Port2
#define Unused             Box1_Port3
#define Unused             Box1_Port4
#define Unused             Box1_Port5
#define Unused             Box1_Port6
#define Unused             Box1_Port7
#define Unused             Box1_Port8

////// Place global variable code below here
byte wpMode;
int WCstatus;
////// Place global variable code above here
void setup()
{
  // This must be the first line
  InternalMemory.LCDID_write(0);
  ReefAngel.Init();  //Initialize controller
  ReefAngel.AddDateTimeMenu(); 
  ReefAngel.AddStandardMenu();  // Add Standard Menu
  ReefAngel.PHMin=546;//PH7.0
  ReefAngel.PHMax=734;//PH10.0
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = 0;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port4Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port7Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 810 );
  ReefAngel.Timer[1].SetInterval(180);
  
  // Ports that are always on
  ReefAngel.Relay.On( Return ); // Return Pump
  ReefAngel.Relay.On( Skimmer ); // Skimmer

  ////// Place additional initialization code below here
  ////// Place additional initialization code above here
}
void loop()
{
  ////// Place your custom code below here
  CheckPower();           // Monitor for power outages

  ReefAngel.PWM.SetChannel( 0, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 1, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 2, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 3, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 4, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 5, PWMSlope(9,30,21,30,17,100,60,0) );

  ReefAngel.WaterLevelATO(Port3,120,43,45);
  if (ReefAngel.LowATO.IsActive()) ReefAngel.Relay.On(RODIValve);
  if (!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off(RODIValve);
  ReefAngel.DosingPumpRepeat( Port1,0,45,6 );
  if (ReefAngel.Params.PH>=850) ReefAngel.Relay.Off(KalkDoser);
  ReefAngel.StandardLights( Port4,20,0,8,0 );
  ReefAngel.Relay.Set(Port5,now()%7200<900);
  ReefAngel.StandardHeater( Port7,780,785 );

  if (hour()>=6 && hour()<11)
  {
    ReefAngel.PWM.SetDaylight( TidalSwellMode(60,true) ); // Tidal Swell at 60% on sync mode
    ReefAngel.PWM.SetActinic( TidalSwellMode(60,false) ); // Tidal Swell at 60% on anti-sync mode
    wpMode=1;
  }
  else if (hour()>=11 && hour()<15)
  {
    ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 60% +/- 20 on sync mode
    ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 60% +/- 20 on anti-sync mode
    wpMode=2;
  }
  else if (hour()>=15 && hour()<18)
  {
    ReefAngel.PWM.SetDaylight( NutrientTransportMode(75,90,2000,true) ); // Nutrient Transport on sync mode
    ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
    wpMode=3;
  }
  else if (hour()>=18 && hour()<20)
  {
    ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 60% +/- 20 on sync mode
    ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 60% +/- 20 on anti-sync mode
    wpMode=2;
  }
  else if (hour()>=20 && hour()<23)
  {
    ReefAngel.PWM.SetDaylight( TidalSwellMode(60,true) ); // Tidal Swell at 60% on sync mode
    ReefAngel.PWM.SetActinic( TidalSwellMode(60,false) ); // Tidal Swell at 60% on anti-sync mode
    wpMode=1;
  }
  else
  {
    ReefAngel.PWM.SetDaylight( SineMode(38,48,30,true) ); // Sine at 30% 45% with for 30s on sync mode
    ReefAngel.PWM.SetActinic( SineMode(38,48,30,false) ); // Sine at 30% 45% with for 30s on anti sync mode
    wpMode=4;
  }
  if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
  {
    if (WCstatus==-1) 
    {
      ReefAngel.Timer[1].Start();
      WCstatus=0;
    }
    if ( ReefAngel.Timer[1].IsTriggered() )
    {
      ReefAngel.Relay.On(WCEmpty);
      WCstatus=1;
    }
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus>0 && WCstatus<10) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus==10)
    {
      WCstatus=11;
      ReefAngel.Relay.Off(WCEmpty);
      ReefAngel.Relay.On(WCFill);
    }
    if (ReefAngel.WaterLevel.GetLevel()<=81 && WCstatus>10 && WCstatus<20) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()>81 && WCstatus==20) 
    {
      ReefAngel.Relay.Off(WCFill);
      ButtonPress++;
    }
  }
  else 
  {
    WCstatus=-1;
    ReefAngel.Relay.Off(WCEmpty);
    ReefAngel.Relay.Off(WCFill); 
  } 
  ReefAngel.Portal("Drs1210");
  ReefAngel.ShowInterface(); // Display everything on the LCD screen
}
void CheckPower() {
  static boolean powerOutage=false;


  // Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
  {
    powerOutage=true;
    ReefAngel.Relay.Off(KalkDoser); 
    ReefAngel.Relay.Off(WCEmpty); 
    ReefAngel.Relay.Off(Refugium); 
    ReefAngel.Relay.Off(KalkStirrer);
    ReefAngel.Relay.Off(WCFill);
    ReefAngel.Relay.Off(Heater);
    ReefAngel.Relay.Off(RODIValve); 
    ReefAngel.Relay.Off(Skimmer); 

  }

  // Power Restored - Turn things back on
  if (powerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
  {
    LastStart=now();
    powerOutage=false;
    ReefAngel.Relay.On(Return); 
    ReefAngel.Relay.On(Skimmer); 

  }
}
void DrawCustomMain()
{
  byte x = 6;
  byte y = 2;
  byte t;
  char text[7];

  ReefAngel.LCD.DrawDate(6, 3);
  ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
  pingSerial();

  ReefAngel.LCD.DrawText(COLOR_BLACK,255,56,84, "Res");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 83, "H");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 93, "I");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 83, "L");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 93, "O");

  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 75, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 101, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 88, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 98, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 88, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 98, "|");

  ReefAngel.LCD.DrawText(0,255,10,30,"Tank");
  ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
  ReefAngel.LCD.DrawLargeText(COLOR_INDIANRED, 255, 10, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,100,30,"pH");
  ConvertNumToString(text, ReefAngel.Params.PH, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_PLUM, 255, 91, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
  ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,8,68,"WC");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CHOCOLATE, 25, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,66,68,"Room");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_MEDIUMORCHID, 94, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,15,83,"WL");
  ConvertNumToString(text, ReefAngel.WaterLevel.GetLevel(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_BLUE, 255, 10, 92, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,26,92," %");
  pingSerial();

  // WP40 Mode

  ReefAngel.LCD.DrawText(0,255,x,y,"Jebao WP40 Mode:"); 
  ReefAngel.LCD.Clear(DefaultBGColor,x,y,128-x,y+8);
  if (wpMode == 1) ReefAngel.LCD.DrawText(COLOR_GREEN,255,x,y,"Tidal Swell");
  else if (wpMode == 2) ReefAngel.LCD.DrawText(COLOR_MAGENTA,255,x,y,"Reef Crest");
  else if (wpMode == 3) ReefAngel.LCD.DrawText(COLOR_GOLD,255,x,y,"Nutrient");
  else if (wpMode == 4) ReefAngel.LCD.DrawText(COLOR_RED,255,x,y,"Sine Mode");

  ReefAngel.LCD.DrawText(0,255,96,83,"WP40");
  ConvertNumToString(text, ReefAngel.PWM.GetActinicValue(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_OLIVE, 255, 99, 92, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,115,92," %");
  pingSerial();

  // Main Relay box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(14, 106, TempRelay);
  pingSerial();

  // Relay Expansion
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox( 14, 118, TempRelay );
  pingSerial();

  if (ReefAngel.HighATO.IsActive())
    ReefAngel.LCD.FillCircle(57,96,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(57,96,3,COLOR_GREEN);

  if (ReefAngel.LowATO.IsActive())
    ReefAngel.LCD.FillCircle(70,96,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(70,96,3,COLOR_GREEN);

}
void DrawCustomGraph()
{
}
Drs1210

Re: Help with code

Post by Drs1210 »

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 <Humidity.h>
#include <DCPump.h>
#include <ReefAngel.h>

// Define Relay Ports by Name
#define KalkDoser          1
#define WCEmpty            2
#define Autotopoff         3
#define Refugium           4
#define KalkStirrer        5
#define WCFill             6
#define Heater             7
#define Return             8

#define RODIValve          Box1_Port1
#define Skimmer            Box1_Port2
#define Unused             Box1_Port3
#define Unused             Box1_Port4
#define Unused             Box1_Port5
#define Unused             Box1_Port6
#define Unused             Box1_Port7
#define Unused             Box1_Port8

////// Place global variable code below here
byte wpMode;
int WCstatus;
////// Place global variable code above here
void setup()
{
  // This must be the first line
  InternalMemory.LCDID_write(0);
  ReefAngel.Init();  //Initialize controller
  ReefAngel.AddDateTimeMenu(); 
  ReefAngel.AddStandardMenu();  // Add Standard Menu
  ReefAngel.PHMin=546;//PH7.0
  ReefAngel.PHMax=734;//PH10.0
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = 0;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port4Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port7Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 810 );
  ReefAngel.Timer[1].SetInterval(180);

  // Ports that are always on
  ReefAngel.Relay.On( Return ); // Return Pump
  ReefAngel.Relay.On( Skimmer ); // Skimmer

    ////// Place additional initialization code below here
  ////// Place additional initialization code above here
}
void loop()
{
  ////// Place your custom code below here
  CheckPower();           // Monitor for power outages

  ReefAngel.PWM.SetChannel( 0, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 1, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 2, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 3, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 4, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 5, PWMSlope(9,30,21,30,17,100,60,0) );

  ReefAngel.WaterLevelATO(Port3,120,43,45);
  if (ReefAngel.LowATO.IsActive()) ReefAngel.Relay.On(RODIValve);
  if (!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off(RODIValve);
  ReefAngel.DosingPumpRepeat( Port1,0,45,6 );
  if (ReefAngel.Params.PH>=850) ReefAngel.Relay.Off(KalkDoser);
  ReefAngel.StandardLights( Port4,20,0,8,0 );
  ReefAngel.Relay.Set(Port5,now()%7200<900);
  ReefAngel.StandardHeater( Port7,780,785 );

  if (hour()>=6 && hour()<8)
  {
    ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
    wpMode=0;
  }

  else if (hour()>=8 && hour()<9)
  {
    ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
    wpMode=1;
  }

  else if (hour()>=9 && hour()<13)
  {
    ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
    wpMode=3;
  }

  else if (hour()>=13 && hour()<16)
  {
    ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
    wpMode=2;
  }

  else if (hour()>=16 && hour()<20)
  {
    ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
    wpMode=3;
  }

  else if (hour()>=20 && hour()<21)
  {
    ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
    wpMode=1;
  }

  else if (hour()>=21 && hour()<23)
  {
    ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
    wpMode=0;
  }

  else
  {
    ReefAngel.PWM.SetActinic( SineMode(40,55,30,false) ); // Sine at 40% 55% with for 30s on anti sync mode
    wpMode=4;
  }

  // If we are feeding override the schedule
  if (now()%86400==36000) 
  {
    ReefAngel.FeedingModeStart(); // 36000 is number of seconds from midnight
    ReefAngel.PWM.SetDaylight(30);
    ReefAngel.PWM.SetActinic(30);
    wpMode=5;
  } 
    else  {
    ReefAngel.PWM.SetDaylight(100);
  }
  if (now()%86400==25200) 
  {
    ReefAngel.FeedingModeStart(); // 25200 is number of seconds from midnight
    ReefAngel.PWM.SetDaylight(30);
    ReefAngel.PWM.SetActinic(30);
    wpMode=5;
  } 
  else  {
    ReefAngel.PWM.SetDaylight(100);
  }

  if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
  {
    if (WCstatus==-1) 
    {
      ReefAngel.Timer[1].Start();
      WCstatus=0;
    }
    if ( ReefAngel.Timer[1].IsTriggered() )
    {
      ReefAngel.Relay.On(WCEmpty);
      WCstatus=1;
    }
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus>0 && WCstatus<10) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus==10)
    {
      WCstatus=11;
      ReefAngel.Relay.Off(WCEmpty);
      ReefAngel.Relay.On(WCFill);
    }
    if (ReefAngel.WaterLevel.GetLevel()<=81 && WCstatus>10 && WCstatus<20) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()>81 && WCstatus==20) 
    {
      ReefAngel.Relay.Off(WCFill);
      ButtonPress++;
    }
  }
  else 
  {
    WCstatus=-1;
    ReefAngel.Relay.Off(WCEmpty);
    ReefAngel.Relay.Off(WCFill); 
  } 
  ReefAngel.Portal("Drs1210");
  ReefAngel.ShowInterface(); // Display everything on the LCD screen
}
void CheckPower() {
  static boolean powerOutage=false;


  // Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
  {
    powerOutage=true;
    ReefAngel.Relay.Off(KalkDoser); 
    ReefAngel.Relay.Off(WCEmpty); 
    ReefAngel.Relay.Off(Refugium); 
    ReefAngel.Relay.Off(KalkStirrer);
    ReefAngel.Relay.Off(WCFill);
    ReefAngel.Relay.Off(Heater);
    ReefAngel.Relay.Off(RODIValve); 
    ReefAngel.Relay.Off(Skimmer); 

  }

  // Power Restored - Turn things back on
  if (powerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
  {
    LastStart=now();
    powerOutage=false;
    ReefAngel.Relay.On(Return); 
    ReefAngel.Relay.On(Skimmer); 

  }
}
void DrawCustomMain()
{
  byte x = 6;
  byte y = 2;
  byte t;
  char text[7];

  ReefAngel.LCD.DrawDate(6, 3);
  ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
  pingSerial();

  ReefAngel.LCD.DrawText(COLOR_BLACK,255,56,83, "Res");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 83, "H");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 91, "I");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 83, "L");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 91, "O");

  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 75, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 98, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 95, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 95, "|");

  ReefAngel.LCD.DrawText(0,255,10,30,"Tank");
  ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
  ReefAngel.LCD.DrawLargeText(COLOR_INDIANRED, 255, 10, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,100,30,"pH");
  ConvertNumToString(text, ReefAngel.Params.PH, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_PLUM, 255, 91, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
  ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,8,68,"WC");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CHOCOLATE, 25, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,66,68,"Room");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_MEDIUMORCHID, 94, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,15,83,"WL");
  ConvertNumToString(text, ReefAngel.WaterLevel.GetLevel(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_BLUE, 255, 10, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,26,91," %");
  pingSerial();

  // WP40 Mode

  ReefAngel.LCD.DrawText(0,255,18,12,"Jebao WP40 Mode:");
  ReefAngel.LCD.Clear(COLOR_WHITE, 1, 21, 132, 21); 
  if (wpMode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255, 23, 21,"Tidal Swell");
  else if (wpMode == 1) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255, 25, 21,"Reef Crest");
  else if (wpMode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255, 8, 21,"Nutrient Trnsp.");
  else if (wpMode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255, 30, 21,"Else Mode");
  else if (wpMode == 4) ReefAngel.LCD.DrawLargeText(COLOR_RED,255, 30, 21,"Sine Mode");
  else if (wpMode == 5) ReefAngel.LCD.DrawLargeText(COLOR_TEAL,255, 21, 21,"Feeding Mode");

  ReefAngel.LCD.DrawText(0,255,96,83,"WP40");
  ConvertNumToString(text, ReefAngel.PWM.GetActinicValue(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_OLIVE, 255, 99, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,115,91," %");
  pingSerial();

  // Main Relay box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(14, 106, TempRelay);
  pingSerial();

  // Relay Expansion
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox( 14, 118, TempRelay );
  pingSerial();

  if (ReefAngel.HighATO.IsActive())
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_GREEN);

  if (ReefAngel.LowATO.IsActive())
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_GREEN);

}
void DrawCustomGraph()
{
}

byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
{
  // Static's only initialize the first time they are called
  static unsigned long LastChange=millis();        // Set the inital time that the last change occurred
  static int Delay = random( 500, 3000);           // Set the initial delay
  static int NewSpeed = MidPoint;                  // Set the initial speed
  static int AntiSpeed = MidPoint;                 // Set the initial anti sync speed
  if ((millis()-LastChange) > Delay)               // Check if the delay has elapsed
  {
    Delay=random(500,5000);                        // If so, come up with a new delay
    int ChangeUp = random(Offset);                 // Amount to go up or down
    if (random(100)<50)                            // 50/50 chance of speed going up or going down
    {
      NewSpeed = MidPoint - ChangeUp;
      AntiSpeed = MidPoint + ChangeUp;
    }
    else
    {
      NewSpeed = MidPoint + ChangeUp;
      AntiSpeed = MidPoint - ChangeUp;
    }
    LastChange=millis();                           // Reset the time of the last change
  }
  if (WaveSync)
  {
    return NewSpeed;
  }
  else
  {
    return AntiSpeed;
  }
}
Last edited by Drs1210 on Sun Jul 14, 2013 6:22 pm, edited 3 times in total.
Drs1210

Re: Help with code

Post by Drs1210 »

Nevermind I figured it out.
rossbryant1956
Posts: 471
Joined: Sat Jan 14, 2012 2:08 pm
Location: Montgomery Village, MD

checkpower

Post by rossbryant1956 »

I saw in your loop section a reference to

Code: Select all

void loop()
{
  ////// Place your custom code below here
  CheckPower();           // Monitor for power outages
then later on I see

Code: Select all

void CheckPower() {
  static boolean powerOutage=false;


  // Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
This seems cleaner than what I am doing. Can you explain why you did it this way? Thx
Roscoe's Reefs - Starting Over Again:

Building new 29g Nano after landlord went berserk over my 4 75 gallon tanks, Multiple RA's, Water mixing stations, etc. Your help welcomed in remembering all I've forgotten.
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Help with code

Post by lnevo »

It came from my ino. I have tried to keep all my code features as functions so they are easier to copy for others, follows better coding standards and keeps loop() more readable.
rossbryant1956
Posts: 471
Joined: Sat Jan 14, 2012 2:08 pm
Location: Montgomery Village, MD

Re: Help with code

Post by rossbryant1956 »

okay, so in the loop you are calling the function "checkpower" so that as it loops thru it does the commands listed in the void section, yes?

Next question, what changes do I need to make (if any) to this line if I have multiple expansion relays that will be off during an outage? I have a total of three relay boxes.

Code: Select all

// Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
thx
Roscoe's Reefs - Starting Over Again:

Building new 29g Nano after landlord went berserk over my 4 75 gallon tanks, Multiple RA's, Water mixing stations, etc. Your help welcomed in remembering all I've forgotten.
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Help with code

Post by lnevo »

Nothing to that line, unless you change which relay exp is non-ups powered.

All you need to change in relation is which ports you are turning on/off.
rossbryant1956
Posts: 471
Joined: Sat Jan 14, 2012 2:08 pm
Location: Montgomery Village, MD

Re: Help with code

Post by rossbryant1956 »

both exp relays 2 & 3 will be non-ups powered.
Roscoe's Reefs - Starting Over Again:

Building new 29g Nano after landlord went berserk over my 4 75 gallon tanks, Multiple RA's, Water mixing stations, etc. Your help welcomed in remembering all I've forgotten.
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Help with code

Post by lnevo »

So you can test either or both. Do you want the condition that both are off?
rossbryant1956
Posts: 471
Joined: Sat Jan 14, 2012 2:08 pm
Location: Montgomery Village, MD

Re: Help with code

Post by rossbryant1956 »

in my design both relays (2&3) will be non-ups. Thx
Roscoe's Reefs - Starting Over Again:

Building new 29g Nano after landlord went berserk over my 4 75 gallon tanks, Multiple RA's, Water mixing stations, etc. Your help welcomed in remembering all I've forgotten.
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Help with code

Post by lnevo »

This one will test that both relays are offline. If you want it to be either change && to ||

Code: Select all

// Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY) && (!ReefAngel.Relay.IsRelayPresent(EXP2_RELAY)) // Expansion Relay NOT present
Post Reply