Mirating to v0.9 - help needed.

Related to the development libraries, released by Curt Binder
Post Reply
serhiyi
Posts: 50
Joined: Thu Jul 21, 2011 8:59 pm

Mirating to v0.9 - help needed.

Post by serhiyi »

I spent some time today installing everything that is required to use v0.9 and was trying to get my PDE converted to INO.

The part with include files was easy, but I'm not sure where to go next.

I have PDE with custom screen and simple menu. I'd like to keep screen but menu can change if it is simpler to do.
I also have some email alerts, that looks like can be removed and moved to be handled by portal.

I do not have any expansions, only controller itself with WiFi attachment.

Does anyone has an example of the code that works with v0.9 libraries or can translate my PDE to new version?
I would try myself, but I'm afraid to loose controller for several days if something goes wrong (it is powering my tank now). And looks like there is no easy way to have v0.8 installed with v0.9 for quick upload of older version.

Code: Select all

// RAMenus.pde
//
// This version designed for v0.8.5 Beta 10 and later

#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_Colors.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 <ReefAngel.h>


// Port1 - Single ATO
// Port2 - Heater
// Port3 - Daylight LED
// Port4 - Actinic LED
// Port5 - Wavemaker 1
// Port6 - Wawemaker 2
// Port7 - Return Pump
// Port8 - Skimmer
    

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


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

   x = 4;
   y += 12;
   ReefAngel.LCD.DrawText(COLOR_BLACK, COLOR_WHITE, x, y, "Temperature:");

   y += 10;
   ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
   pingSerial();
   ReefAngel.LCD.DrawHugeNumbers(COLOR_BLUE, COLOR_WHITE, x, y, text);
   x = 76;
   ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE,x,y,"LED");
   ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_BLUE, x+28, y, 10);
   ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE,x,y+9,"ROOM");
   ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_BLUE, x+28, y+9, 10);
   pingSerial();

   ReefAngel.LCD.Clear(COLOR_BLACK, 1, 42, 132, 42);

   x = 4;
   y = 45;
   ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE,x,y,"pH");
   ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.PH, COLOR_BLUE, x+28, y, 100);
   y = 55;
//   ReefAngel.LCD.DrawText(COLOR_BLACK,DefaultBGColor,x,y,"ATO");
//   atoH = "Off";
//   if (ReefAngel.HighATO.IsActive()) atoH = "On";
//   atoL = "Off";
//   if (ReefAngel.LowATO.IsActive()) atoL = "On";
//   ReefAngel.LCD.DrawText(COLOR_BLACK,DefaultBGColor,x+28,y,"Hi "+atoH+" Low "+atoL);



   x = 76;
   y = 45;
   ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE,x,y,"DayL");
   x=104;
   ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetDaylightValue(),COLOR_BLUE, x, y, 1);
   t = intlength(ReefAngel.PWM.GetDaylightValue()) + 1;
   t *= 5;
   ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE, x+t, y, "%");

   x = 76;
   y = 55;
   ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE,x,y,"ActL");
   x=104;
   ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetActinicValue(),COLOR_BLUE, x, y, 1);
   t = intlength(ReefAngel.PWM.GetActinicValue()) + 1;
   t *= 5;
   ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE, x+t, y, "%");

   pingSerial();


   x = 12;
   y = 118;
   byte TempRelay = ReefAngel.Relay.RelayData;
   TempRelay &= ReefAngel.Relay.RelayMaskOff;
   TempRelay |= ReefAngel.Relay.RelayMaskOn;
   ReefAngel.LCD.DrawOutletBox(x, y, TempRelay);
}

void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph(5,50);
}


void setup()
{
    ReefAngel.Init(); //Initialize controller
    ReefAngel.SetTemperatureUnit(0);
    ReefAngel.PWM.SetActinic(0);
    ReefAngel.PWM.SetDaylight(0);

    // Set the ports that get toggled on & off during the following modes
    // To enable a port to be toggled, place a 1 in the appropriate position
    // Uncomment and update as needed
    // Port 87654321
    ReefAngel.FeedingModePorts = B11110000;
    ReefAngel.WaterChangePorts = B11110000;
    ReefAngel.OverheatShutoffPorts = B01011100;
    ReefAngel.LightsOnPorts = B00001110;

    ReefAngel.Relay.On(Port7); // Return Pump
    ReefAngel.Relay.On(Port8); // Skimmer
}

void loop()
{
    ReefAngel.Portal("serhiyi", "xxx");

    // ATO
    ReefAngel.SingleATOLow(Port1);
    if (ReefAngel.HighATO.IsActive()) {   // Overwrite ATO OFF - no fresh water
      ReefAngel.Relay.Off(Port1);       
      if (ReefAngel.LowATO.IsActive()) {  // ATO low and high ON - no water
        ReefAngel.Relay.Off(Port7);       // Return Pump OFF
        ReefAngel.Relay.Off(Port8);       // Skimmer OFF
      }
    }

    ReefAngel.StandardHeater(Port2);

    ReefAngel.MHLights(Port3);
    ReefAngel.StandardLights(Port4);
    ReefAngel.Wavemaker1(Port5);
    ReefAngel.Wavemaker2(Port6);

    ReefAngel.PWM.SetActinic(PWMSlope(InternalMemory.StdLightsOnHour_read(),InternalMemory.StdLightsOnMinute_read(),InternalMemory.StdLightsOffHour_read(),InternalMemory.StdLightsOffMinute_read(),0,InternalMemory.LEDPWMActinic_read(),90,ReefAngel.PWM.GetActinicValue()));
    ReefAngel.PWM.SetDaylight(PWMSlope(InternalMemory.MHOnHour_read(),InternalMemory.MHOnMinute_read(),InternalMemory.MHOffHour_read(),InternalMemory.MHOffMinute_read(),0,InternalMemory.LEDPWMDaylight_read(),60,ReefAngel.PWM.GetDaylightValue()));

    ReefAngel.ShowInterface();
}
It looks like there is new functionality for heater, pwm slope, and wave makers that works with memory now?
I'm getting lost. I probably will have to give it a try next week, but if I can get any help I will feel safer.

Thanks in advance.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Mirating to v0.9 - help needed.

Post by rimai »

Your code looks good and compile without errors :)
The only thing is the Portal() function needs to move to the end of the code just above ShowInterface()
Roberto.
serhiyi
Posts: 50
Joined: Thu Jul 21, 2011 8:59 pm

Re: Mirating to v0.9 - help needed.

Post by serhiyi »

Thanks Roberto.
I'll give it a try. I guess I will do some adjustments to use more new features once it is loaded.

I might have memory issues. Looks like upgrade to RA+ is coming :)
serhiyi
Posts: 50
Joined: Thu Jul 21, 2011 8:59 pm

Re: Mirating to v0.9 - help needed.

Post by serhiyi »

Ok. Need memory. I cleaned up what I think I could.
Any ideas what I can change to minimize footprint?

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_Colors.h>
    #include <RA_CustomColors.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 <ReefAngel.h>

    // Port1 - Single ATO
    // Port2 - Heater
    // Port3 - Daylight LED
    // Port4 - Actinic LED
    // Port5 - Wavemaker 1
    // Port6 - Wawemaker 2
    // Port7 - Return Pump
    // Port8 - Skimmer
       

    void DrawCustomMain()
    {
       char text[7];

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

       ReefAngel.LCD.DrawText(COLOR_BLACK, COLOR_WHITE, 4, 14, "Temperature:");

       ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
       ReefAngel.LCD.DrawHugeNumbers(COLOR_BLUE, COLOR_WHITE, 4, 24, text);

       ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE, 76, 24,"LED");
       ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_BLUE, 104, 24, 10);
       
       ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE, 76, 33,"ROOM");
       ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_BLUE, 104, 33, 10);

       ReefAngel.LCD.Clear(COLOR_BLACK, 1, 42, 132, 42);

       ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE, 4, 45, "pH");
       ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.PH, COLOR_BLUE, 32, 45, 100);

       ReefAngel.LCD.DrawText(COLOR_BLUE,COLOR_WHITE, 76, 45, "DayL");
       ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetDaylightValue(),COLOR_BLUE, 104, 45, 1);
       ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE, 104+15, 45, "%");

       ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE, 76, 55, "ActL");
       ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetActinicValue(),COLOR_BLUE, 104, 55, 1);
       ReefAngel.LCD.DrawText(COLOR_BLUE, COLOR_WHITE, 104+15, 55, "%");

       byte TempRelay = ReefAngel.Relay.RelayData;
       TempRelay &= ReefAngel.Relay.RelayMaskOff;
       TempRelay |= ReefAngel.Relay.RelayMaskOn;
       ReefAngel.LCD.DrawOutletBox(12, 118, TempRelay);

       pingSerial();
    }

    void DrawCustomGraph()
    {
    // ReefAngel.LCD.DrawGraph(5,50);
    }


    void setup()
    {
        ReefAngel.Init(); //Initialize controller
        ReefAngel.SetTemperatureUnit(0);
        ReefAngel.PWM.SetActinic(0);
        ReefAngel.PWM.SetDaylight(0);

        ReefAngel.FeedingModePorts = B11110000;
        ReefAngel.WaterChangePorts = B11110000;

        ReefAngel.Relay.On(Port7); // Return Pump
        ReefAngel.Relay.On(Port8); // Skimmer
    }

    void loop()
    {
        // ATO
        ReefAngel.SingleATOLow(Port1);
        if (ReefAngel.HighATO.IsActive()) {   // Overwrite ATO OFF - no fresh water
          ReefAngel.Relay.Off(Port1);       
          if (ReefAngel.LowATO.IsActive()) {  // ATO low and high ON - no water
            ReefAngel.Relay.Off(Port7);       // Return Pump OFF
            ReefAngel.Relay.Off(Port8);       // Skimmer OFF
          }
        }

        ReefAngel.StandardHeater(Port2);

        ReefAngel.MHLights(Port3);
        ReefAngel.StandardLights(Port4);
        ReefAngel.Wavemaker1(Port5);
        ReefAngel.Wavemaker2(Port6);

        ReefAngel.PWM.SetActinic(PWMSlope(InternalMemory.StdLightsOnHour_read(),InternalMemory.StdLightsOnMinute_read(),InternalMemory.StdLightsOffHour_read(),InternalMemory.StdLightsOffMinute_read(),0,InternalMemory.LEDPWMActinic_read(),90,ReefAngel.PWM.GetActinicValue()));
        ReefAngel.PWM.SetDaylight(PWMSlope(InternalMemory.MHOnHour_read(),InternalMemory.MHOnMinute_read(),InternalMemory.MHOffHour_read(),InternalMemory.MHOffMinute_read(),0,InternalMemory.LEDPWMDaylight_read(),60,ReefAngel.PWM.GetDaylightValue()));

        ReefAngel.Portal("serhiyi", "ibahob");
        ReefAngel.ShowInterface();
    }
My feature file:

Code: Select all

#ifndef __REEFANGEL_FEATURES_H__
#define __REEFANGEL_FEATURES_H__


#define NUMBERS_16x16
#define DisplayLEDPWM
#define wifi


#endif  // __REEFANGEL_FEATURES_H__
It feels like I removed more then I should from features file.

Binary sketch size: 34082 bytes (of a 30720 byte maximum)
binder
Posts: 2871
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
Contact:

Re: Mirating to v0.9 - help needed.

Post by binder »

Make sure you open and close Arduino and recompile. That's one thing.
If you could, removing the large fonts will improve the code size as well too.
Post Reply