Problem with Dosometric

Related to the development libraries, released by Curt Binder
Post Reply
lukeluke
Posts: 88
Joined: Mon Apr 04, 2011 4:12 am
Location: Rome, Italy

Problem with Dosometric

Post by lukeluke »

i have the .19 release.

i change the value 812 memory trought the java client of Curt. i set it to 2 and i see that is at 2.

But when the function start :

ReefAngel.DosingPump(Port3, 1, 23, 00, InternalMemory.DP1Timer_read());

the on status don't run for 2 seconds, but for 6 seconds.

Why ? is changed somethings ?

Thanks a lot.
binder
Posts: 2871
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
Contact:

Re: Problem with Dosometric

Post by binder »

lukeluke wrote:i have the .19 release.

i change the value 812 memory trought the java client of Curt. i set it to 2 and i see that is at 2.

But when the function start :

ReefAngel.DosingPump(Port3, 1, 23, 00, InternalMemory.DP1Timer_read());

the on status don't run for 2 seconds, but for 6 seconds.

Why ? is changed somethings ?

Thanks a lot.
Nothing has changed. If it runs for longer than desired, there could be other stuff in your PDE file that are taking longer to run than that function should run for. Every time the function is called, it checks if it should run or not. Could you post your PDE file for review to see if we can reproduce the problem and see if anything else is affecting it?

curt
lukeluke
Posts: 88
Joined: Mon Apr 04, 2011 4:12 am
Location: Rome, Italy

Re: Problem with Dosometric

Post by lukeluke »

on my office's pc, i have only this my pde:

Code: Select all

#include <ReefAngel_Features.h>
#include <ReefAngel_Globals.h>
#include <ReefAngel_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <ReefAngel_EEPROM.h>
#include <ReefAngel_NokiaLCD.h>
#include <ReefAngel_ATO.h>
#include <ReefAngel_Joystick.h>
#include <ReefAngel_LED.h>
#include <ReefAngel_TempSensor.h>
#include <ReefAngel_Relay.h>
#include <ReefAngel_PWM.h>
#include <ReefAngel_Timer.h>
#include <ReefAngel_Memory.h>
#include <ReefAngel.h>

int DP3_Timer = InternalMemory.DP1Timer_read() * 4;

//Disegno schermo principale
/*
void DrawCustomMain()
{
 // Change the 30 to adjust the horizontal position of the text on the screen, max 20-21 chars
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 15, 15, "LukeLuke's Cube");
  ReefAngel.LCD.DrawDate(6, 112);
  pingSerial();
#if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor(15, 35, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue());
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor(15, 60, ReefAngel.Params);
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  pingSerial();
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 6, 70, "DP1:");
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 31, 70, InternalMemory.DP1Timer_read());
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 46, 70, "DP2:");
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 71, 70, InternalMemory.DP2Timer_read());
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 86, 70, "DP3:");
  ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 111, 70, DP3_Timer);
  // draw main relay
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(12, 87, TempRelay);
#ifdef RelayExp
  // draw 1st expansion relay
  TempRelay = ReefAngel.Relay.RelayDataE[0];
  TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
  TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
  ReefAngel.LCD.DrawOutletBox(12, 100, TempRelay);
#endif  // RelayExp 
}*/

void ConvertNumToString(char* string, int num, byte decimal)
{
	char temptxt[3];
	int Temp = num;
	if (Temp==0xFFFF) Temp=0;
		itoa(Temp/decimal,string,10);
	if (decimal>1)
	{
		itoa(Temp%decimal,temptxt,10);
		strcat(string, ".");
		if (Temp%decimal<10 && decimal==100) strcat(string, "0");
			strcat(string, temptxt);
	}
}

void DrawCustomMain()
{
	byte x = 6;
	byte y = 2;
	byte t;
	ReefAngel.LCD.DrawDate(6, 2);
	ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
	pingSerial();
	x = 12;
	y += MENU_START_ROW+4;
	ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetDaylightValue(),DPColor, x, y, 1);
	t = intlength(ReefAngel.PWM.GetDaylightValue()) + 1;
	t *= 5;
	ReefAngel.LCD.DrawText(DPColor, DefaultBGColor, x+t, y, "%");
	t += 10;
	x += t;
	ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetActinicValue(),APColor, x, y, 1);
	t = intlength(ReefAngel.PWM.GetActinicValue()) + 1;
	t *= 5;
	ReefAngel.LCD.DrawText(APColor, DefaultBGColor, x+t, y, "%");
	t += 10;
	x += t;
	char text[7];
	ConvertNumToString(text, ReefAngel.Params.PH, 100);
	ReefAngel.LCD.Clear(DefaultBGColor, x+16, y, x+45, y+16);
	ReefAngel.LCD.DrawLargeText(PHColor, DefaultBGColor, x+16, y, text,Font8x16);
	pingSerial();
	ConvertNumToString(text, ReefAngel.Params.Temp1, 10);
	y += MENU_START_ROW*2;
	x = 10;
	ReefAngel.LCD.Clear(DefaultBGColor,x,y,x+(16*4),y+16);
	pingSerial();
	ReefAngel.LCD.DrawHugeNumbers(T1TempColor, DefaultBGColor, x, y, text);
	pingSerial();
	x += (16*4) + 8;
	ReefAngel.LCD.DrawText(T2TempColor,DefaultBGColor,x,y,"T2:");
	ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp2, T2TempColor, x+18, y, 10);
	ReefAngel.LCD.DrawText(T3TempColor,DefaultBGColor,x,y+10,"T3:");
	ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp3, T3TempColor, x+18, y+10, 10);
	y += 16*2;
	x = 8;
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x, y, "DP1:");
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+25, y, InternalMemory.DP1Timer_read());
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+37, y, "DP2:");
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+62, y, InternalMemory.DP2Timer_read());
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+75, y, "DP3:");
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+101, y, DP3_Timer);      
        x = 6;
	y += MENU_START_ROW+6;
        y -= 3;
        ReefAngel.LCD.Clear(COLOR_BLACK, x, y, 124, y);
        y +=1;
        ReefAngel.LCD.Clear(COLOR_BLUE, x+1, y, 123, y+10);
        y +=11;
        ReefAngel.LCD.Clear(COLOR_BLACK, x, y, 124, y);
        ReefAngel.LCD.Clear(COLOR_BLACK, x, y-11, x, y+16);
        ReefAngel.LCD.Clear(COLOR_BLACK, 124, y-11, 124, y+16);
        ReefAngel.LCD.DrawText(COLOR_WHITE, COLOR_BLUE, x+40, y-9, "Alarms");
        y += 6;
        x += 2;
	byte fcolor;
	// This is for the LOW Ato switch
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+2, y,"ATO:");
	if ( InternalMemory.read(700) == 1 )
	{
		// add in InternalMemory.write(700, 1) when ato is tripped
		// add in InternalMemory.write(700, 0) when ato is cleared
		fcolor = COLOR_RED;
		ReefAngel.LCD.DrawText(fcolor, DefaultBGColor, x+30, y, "YES");
	}
	else
	{
		fcolor = COLOR_GREEN;
		ReefAngel.LCD.DrawText(fcolor, DefaultBGColor, x+30, y, "NO ");
	}
	ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, x+55, y,"OverH:");
	if ( InternalMemory.read(701) == 1 )
	{
		// add in InternalMemory.write(701, 1) when overheat is tripped
		// add in InternalMemory.write(701, 0) when overheat is cleared
		fcolor = COLOR_RED;
		strcpy(text, "YES");
	}
	else
	{
		fcolor = COLOR_GREEN;
		strcpy(text, "NO ");
	}
	ReefAngel.LCD.DrawText(fcolor, DefaultBGColor, x+94, y, text);
        ReefAngel.LCD.Clear(COLOR_BLACK, x-2, y+11, 124, y+11);
	x = 12;
	y += 18;
	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(1);  // set to Celsius Temperature
    ReefAngel.PWM.SetActinic(0);
    ReefAngel.PWM.SetDaylight(0);

    //WifiAuthentication("lukeluke:Luca123");

    // 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 = B00000011;
    ReefAngel.WaterChangePorts = B00000011;
    ReefAngel.OverheatShutoffPorts = B00001011;
    //ReefAngel.LightsOnPorts = B00000110;

    // Ports that are always on

//    ReefAngel.Relay.On(Port4);  //Turn the Skimmer
    ReefAngel.Relay.On(Port2);
   // ReefAngel.Relay.On(Port1);
   int DP3_Timer = InternalMemory.DP1Timer_read() * 4;
}

void loop()
{
    ReefAngel.ShowInterface();

    // Specific functions

    ReefAngel.SingleATOHigh(Port6);
    ReefAngel.StandardFan(Port1);
    ReefAngel.StandardHeater(Port8);
    ReefAngel.DelayedOn(Port4,10);
    
    if (ReefAngel.Params.Temp1 > 290)
      {
        ReefAngel.PWM.SetActinic(PWMSlope(12,15,23,45,0,InternalMemory.LEDPWMActinic_read(),90,ReefAngel.PWM.GetActinicValue()));
        ReefAngel.PWM.SetDaylight(PWMSlope(13,30,22,30,0,40,30,ReefAngel.PWM.GetDaylightValue()));
      }
    else if (ReefAngel.Params.Temp1 > 280)
    {
        ReefAngel.PWM.SetActinic(PWMSlope(12,15,23,45,0,InternalMemory.LEDPWMActinic_read(),90,ReefAngel.PWM.GetActinicValue()));
        ReefAngel.PWM.SetDaylight(PWMSlope(13,30,22,30,0,70,30,ReefAngel.PWM.GetDaylightValue()));
    }
    else
    {
       ReefAngel.PWM.SetActinic(PWMSlope(12,15,23,45,0,InternalMemory.LEDPWMActinic_read(),90,ReefAngel.PWM.GetActinicValue()));
       ReefAngel.PWM.SetDaylight(PWMSlope(13,30,22,30,0,InternalMemory.LEDPWMDaylight_read(),30,ReefAngel.PWM.GetDaylightValue()));
    }
      

    ReefAngel.DosingPump(Port3, 1, 23, 00, InternalMemory.DP1Timer_read());
    ReefAngel.DosingPump(Port3, 1, 05, 00, InternalMemory.DP1Timer_read());
    ReefAngel.DosingPump(Port3, 1, 11, 00, InternalMemory.DP1Timer_read());
    ReefAngel.DosingPump(Port3, 1, 17, 00, InternalMemory.DP1Timer_read());


    ReefAngel.DosingPump(Port5, 2, 23, 10, InternalMemory.DP2Timer_read());
    ReefAngel.DosingPump(Port5, 2, 05, 10, InternalMemory.DP2Timer_read());
    ReefAngel.DosingPump(Port5, 2, 11, 10, InternalMemory.DP2Timer_read());
    ReefAngel.DosingPump(Port5, 2, 17, 10, InternalMemory.DP2Timer_read());

    ReefAngel.DosingPump(Port7, 4, 23, 20, DP3_Timer); // Setup Dosing Pump 3 Oligo
}
in the latest i change the PWM because i use the MH now .....
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Problem with Dosometric

Post by rimai »

I don't see anything wrong with it.
Roberto.
Post Reply