Time Travelling Reef Angel

Do you have a question on how to do something.
Ask in here.
Post Reply
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Time Travelling Reef Angel

Post by egadgetjnr »

So, I'm having this weird thing happening with me RA+. The other night I uploaded my code that I wrote (based off the RAgen code with a few changes) and within a few hours the RA went crazy. The date was saying it was 03/07/43 and a time it wasn't 08:16:35 PM at 6:10 in the morning (I noted that the seconds weren't always going up in 1's but still a second apart. eg 34, 35, 36, 38, 39, 41). The status light on the RA+ was also blinking a quick blink every second or so.

Does anyone know whats happening? when I reboot m controller by unplugging it and plugging it back in, none of the relays will then change from off until i unplug the USB cable from the relay box to the expansion hub and plug it back in.

Any help would be awesome.

P.S. Today I'm running it on RAGen code with NO modifications to see how it copes

Code: Select all

//

#include <Salinity.h>
#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 <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
#include <WiFiAlert.h>

 // Custom Menu
 #include <avr/pgmspace.h>
 prog_char menu1_label[] PROGMEM = "Lights On";
 prog_char menu2_label[] PROGMEM = "Feeding Mode";
 prog_char menu3_label[] PROGMEM = "Water Change";
 prog_char menu4_label[] PROGMEM = "ATO Clear";
 prog_char menu5_label[] PROGMEM = "Overheat Clear";
 prog_char menu6_label[] PROGMEM = "PH Calibration";
 prog_char menu7_label[] PROGMEM = "Sal Calibration";
 prog_char menu8_label[] PROGMEM = "ORP Calibration";
 prog_char menu9_label[] PROGMEM = "Date / Time";
 
 // Group the menu entries together
 PROGMEM const char *menu_items[] = {
 menu1_label, menu2_label, menu3_label,
 menu4_label, menu5_label, menu6_label,
 menu7_label, menu8_label, menu9_label
 };

// Define Relay Ports by Name
#define Return             1
#define WaveMakerLeft      2
#define WaveMakerRight     3
#define LED_WhiteBlue      4
#define LED_Supplemental   5
#define LED_Moonlights     6
#define SkimmerPump        7
#define SkimmerVenturi     8

#define Heater1            Box1_Port1
#define Heater2            Box1_Port2
#define Chiller            Box1_Port3
#define ChillerPump        Box1_Port4
#define SumpLight          Box1_Port5
#define Ozone              Box1_Port6
#define ATO                Box1_Port7
#define Unused             Box1_Port8


//Define Custom Memory Locations
#define CMem_B_Delay_Ozone        100
#define CMem_B_Delay_Skimmer      101
#define CMem_B_Delay_Chiller      102
#define CMem_I_OrpMin             103
#define CMem_I_OrpMax             104
#define CMem_B_LightsEnabled	  105

#define CMem_B_ResetMemory        199

void init_memory()
{
  InternalMemory.write(CMem_B_Delay_Ozone,10);
  InternalMemory.write(CMem_B_Delay_Skimmer,5);
  InternalMemory.write(CMem_B_Delay_Chiller,1);
  InternalMemory.write_int(CMem_I_OrpMin,400);
  InternalMemory.write_int(CMem_I_OrpMax,420);
  InternalMemory.write(CMem_B_LightsEnabled,false);

  InternalMemory.write(CMem_B_ResetMemory,true);
}

void setup()
{
  // This must be the first line
  ReefAngel.Init();  //Initialize controller
  ReefAngel.SetTemperatureUnit( Celsius );  // set to Celsius Temperature

  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port3Bit | Port7Bit;
  ReefAngel.FeedingModePortsE[0] = Port4Bit;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;
  ReefAngel.WaterChangePortsE[0] = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port6Bit | Port7Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port4Bit | Port5Bit;
  ReefAngel.LightsOnPortsE[0] = Port5Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port4Bit | Port5Bit | Port6Bit;
  ReefAngel.OverheatShutoffPortsE[0] = Port1Bit | Port2Bit | Port5Bit | Port6Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;


  // Ports that are always on
  ReefAngel.Relay.On( Return );
  ReefAngel.Relay.On( WaveMakerLeft );
  ReefAngel.Relay.On( WaveMakerRight );
  ReefAngel.Relay.On( SkimmerVenturi );
  ReefAngel.Relay.On( Chiller );
  ////// Place additional initialization code below here
  
  //RA has been restarted. Set lights enabled memory to off

  ////// Place additional initialization code above here
  ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items)); // Initialize Menu
  if (InternalMemory.read(CMem_B_ResetMemory))
  {
    init_memory();
    InternalMemory.write(CMem_B_ResetMemory,false);
  }
}

void loop()
{
  //Initialise Relays
  ReefAngel.MoonLights( LED_Moonlights ); 
  ReefAngel.MoonLights( SumpLight );
  ReefAngel.DayLights( LED_WhiteBlue );
  ReefAngel.DayLights( LED_Supplemental );
  ReefAngel.StandardHeater( Heater1 );
  ReefAngel.StandardHeater( Heater2 );
  ReefAngel.StandardFan( ChillerPump );
  ReefAngel.SingleATOLow( ATO );
  ReefAngel.Relay.DelayedOn( Ozone, InternalMemory.read(CMem_B_Delay_Ozone));
  ReefAngel.Relay.DelayedOn( SkimmerPump, InternalMemory.read(CMem_B_Delay_Skimmer));
//  ReefAngel.Relay.DelayedOn( Chiller, InternalMemory.read(CMem_B_Delay_Chiller));


  //SetPWM as normal if Lights Mode Off
  if(!InternalMemory.read(CMem_B_LightsEnabled))
  {
	  ReefAngel.PWM.Channel0PWMParabola();
	  ReefAngel.PWM.Channel1PWMParabola();
	  ReefAngel.PWM.Channel2PWMParabola();
	  ReefAngel.PWM.Channel3PWMParabola();
	  ReefAngel.PWM.SetChannel( 4, MoonPhase() );
	  ReefAngel.PWM.SetChannel( 5, MoonPhase() );
  }
  else
  {
	  ReefAngel.PWM.SetChannel(0,80);
	  ReefAngel.PWM.SetChannel(1,100);
	  ReefAngel.PWM.SetChannel(2,100);
	  ReefAngel.PWM.SetChannel(3,100);
  }
  ////// Place your custom code below here

  OrpControl();

  ////// Place your custom code above here

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

void DrawCustomMain()
{
  int x,y;
  char text[10];
  // Dimming Expansion
  x = 15;
  y = 2;
  for ( int a=0;a<6;a++ )
  {
    if ( a>2 ) x = 75;
    if ( a==3 ) y = 2;
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
    y += 10;
  }
  pingSerial();

  // I/O Expansion
  byte bkcolor;
  x = 14;
  y = 32;
  for ( int a=0;a<6;a++ )
  {
    ReefAngel.LCD.DrawCircleOutline( x+(a*20),y,4,COLOR_MEDIUMORCHID );
    if ( ReefAngel.IO.GetChannel(a) ) bkcolor=COLOR_WHITE; 
    else bkcolor=COLOR_GRAY;
    ReefAngel.LCD.FillCircle( x+(a*20),y,2,bkcolor );
  }
  pingSerial();

  // Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 39, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 39, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  pingSerial();

  // Salinity
  ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,16,69, "SAL:" );
  ReefAngel.LCD.DrawSingleMonitor( ReefAngel.Params.Salinity,COLOR_DARKKHAKI,40,69, 10 );    
  pingSerial();

  // ORP
  ReefAngel.LCD.DrawText( COLOR_PALEVIOLETRED,DefaultBGColor,82,69, "ORP:" );
  ReefAngel.LCD.DrawText( COLOR_PALEVIOLETRED,DefaultBGColor,106,69, ReefAngel.Params.ORP );
  pingSerial();

  // pH Expansion
  ReefAngel.LCD.DrawText( COLOR_MEDIUMSEAGREEN,DefaultBGColor,15,80, "PHE:" );
  ReefAngel.LCD.DrawSingleMonitor( ReefAngel.Params.PHExp,COLOR_MEDIUMSEAGREEN,39,80, 100 );    
  pingSerial();

  // Main Relay Box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox( 12, 90, TempRelay );
  pingSerial();

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

  // Date and Time
  ReefAngel.LCD.DrawDate( 6, 122 );
  pingSerial();
}
void DrawCustomGraph()
{
}


void OrpControl()
{
  int iOrpMax = InternalMemory.read(CMem_I_OrpMax);
  int iOrpMin = InternalMemory.read(CMem_I_OrpMin);
  int iCurrentOrp = ReefAngel.Params.ORP;
  byte bOzoneDelay = InternalMemory.read(CMem_B_Delay_Ozone);
  static boolean bOrpOn;
  static WiFiAlert waOrpAlert;

  if(iCurrentOrp >= iOrpMax)
  {
	//Turn off Orp Relay
	//Serial.println("Orp Is Off");
	ReefAngel.Relay.Off(Ozone);
	//Send alert Orp is Off
	waOrpAlert.Send("Ozone+is+off!+Max+Ozone");
	bOrpOn = false;
	//write to mem when orp off
  }
  else
  {
    if(!bOrpOn && iCurrentOrp <= iOrpMin )
    {
		//Trigger ORP Relay
		//Serial.println("Orp Is On");
		//Serial.print(ReefAngel.Relay.Status(Ozone));
		ReefAngel.Relay.DelayedOn(Ozone,bOzoneDelay);
		waOrpAlert.Send("Ozone+is+on.");
		bOrpOn = true;
    }
  }

}

void Overheat()
{
  //Enter code for overheat
  //Send wifi alert
}


//Menu Code
 /*prog_char menu1_label[] PROGMEM = "Lights On";
 prog_char menu2_label[] PROGMEM = "Feeding Mode";
 prog_char menu3_label[] PROGMEM = "Water Change";
 prog_char menu4_label[] PROGMEM = "ATO Clear";
 prog_char menu5_label[] PROGMEM = "Overheat Clear";
 prog_char menu6_label[] PROGMEM = "PH Calibration";
 prog_char menu7_label[] PROGMEM = "Sal Calibration";
 prog_char menu8_label[] PROGMEM = "ORP Calibration";
 prog_char menu9_label[] PROGMEM = "Date / Time";*/
void MenuEntry1()
{
	//Turn All Lights On
	if(!InternalMemory.read(CMem_B_LightsEnabled))
	{
		//Turn All Lights Relays On (except moons)
		ReefAngel.Relay.Override(LED_WhiteBlue,1);
		ReefAngel.Relay.Override(LED_Supplemental,1);
		ReefAngel.Relay.Override(SumpLight,1);

		InternalMemory.write(CMem_B_LightsEnabled,true);

		//Set PWM to max
		//Might not need to, done in loop
	}
	else
	{
		//Set Lights to default
		ReefAngel.StandardLights(LED_WhiteBlue);
		ReefAngel.StandardLights(LED_Supplemental);
		ReefAngel.MoonLights(SumpLight);

		//Set PWM to normal
		InternalMemory.write(CMem_B_LightsEnabled,false);
	}

}
void MenuEntry2()
{
	//Feeding Mode
	ReefAngel.FeedingModeStart();
}
void MenuEntry3()
{
	//Water Change
	ReefAngel.WaterChangeModeStart();
}
void MenuEntry4()
{
	//ATO Clear
	ReefAngel.ATOClear();
}
void MenuEntry5()
{
	//Overheat Clear
	ReefAngel.OverheatClear();
}
void MenuEntry6()
{
	//PH Calibration
	ReefAngel.SetupCalibratePHExp();
	ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry7()
{
	//Sal Calibration
	//ReefAngel.SetupCalibrateSalinity();
	//ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;

}
void MenuEntry8()
{
	//ORP Calibration
	
}
void MenuEntry9()
{
	//Date/Time
	ReefAngel.SetupDateTime();
	ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;

}
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

I think your bus was locked.
That's why you needed to disconnect the hub.
What expansion modules do you have?
Roberto.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

rimai wrote:I think your bus was locked.
That's why you needed to disconnect the hub.
What expansion modules do you have?
Hey Roberto,
The first time it happened I only had the dimming module, relay expansion and expansion hub plugged in. The second time it was running the same as above but PH exp. was also plugged it
I was running it before this new code with just the relay expansion coded and didn't utilise the dimming module but it was still plugged in and it was fine. Don't know if that helps you or not.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

Just to add, when it did it last night the PH Exp dropped off and showed err like it wasn't plugged in.
I was just looking on the portal then and I think it's done it again on ragen code
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

Yes, they all use the expansion bus, but I suspect it is the dimming module.
Roberto.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

Anything I can do to fix it?
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

Try running without it to confirm
Roberto.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

Well it looks like it's defiantly the dimming module. Has run for 12 hours+ now and no crash/hang/time travelling.
What would be the next best thing to so Roberto?
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

I'd like to wait a little longer if possible.
Roberto.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

rimai wrote:I'd like to wait a little longer if possible.
No worries Roberto. :-)
I can do that. Did you want me to let you know same time tomorrow how it goes? or give it another 2 days. :)
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

Yeah, let me know tomorrow.
Roberto.
egadgetjnr
Posts: 54
Joined: Wed Jul 18, 2012 1:32 pm

Re: Time Travelling Reef Angel

Post by egadgetjnr »

rimai wrote:Yeah, let me know tomorrow.
Hey Roberto, sorry I didn't get back to you yesterday, I had a lot going on.
I have still not had a crash at all since I unplugged the dimming module.
What would you like me to do next? :)
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Time Travelling Reef Angel

Post by rimai »

Pm me for rma
Roberto.
Post Reply