Aquarium Reef Controller, stage 1, the LCD shield,

The technique you're looking for is called a "state machine".
While the arduino supports some object orientated programming, you're still mostly doing procedural programming.

A state machine is the thing to use in these situations.
Essentially, your menu would have 3 or 4 states.

  1. (default) display data
    if button is pressed, go to state 2
  2. display the basic menu options
    if button is pressed, either change the selection or go to the state of the selected item
  3. light intensity was chosen, button up raises the intensity displayed, button down lowers it. the select button changes the output, has a delay, and returns to state 1.

Now I won't do your work for you and put it into actual code, but I hope you get the idea now :slight_smile:

sounds about right to me Imahilus, i shall do some googling/reading up. thank you.

it sounds vaguely what i had in mind with my While statements or more should i say thats what i wanted to do. thanks.

just writing some coding and see where im at, you were right Chris, i was clearing the menu at the start of the loop which caused the flickering. Just writing up a new piece of code tonight and i'll post it once im done

Luke

Ok so heres some rough coding i knocket together this evening, Its not pretty, its probably not effiecent but its what first came to mind for me that worked.

its just the various "menu" screens or cases, i need to somehow interface the button pad coding into this exisiting coding.

oh and if your wondering why theres 2 of everything its because one has an asterix "*" at the end, this is the way i decided to show which option is "selected".

i looked at the Display blink tutorial in the arduino folders and would like to have a blinking cursor at the end instead of using a asterix but i figured if i used the delay method it used then i could see problems with how the program runs.

its not much but you get the idea.

next step is implimenting the actual keypad. i wrote psudo code in each method sawing what i want to happen when each butten is pressed.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//delares the LCD Pins for the liquidCrystal library methods.
int x = 0;//Used for testing purposes to show the LED strength
int menuOption = 3;//used for the Switch statement, each menu has its own value,
int tankTemp = 25;//used for testing purposes, in real build this value with come from a temp probe
int timeHour = 12;//used for testing purposes, in real build RTC wil give this value
int timeMinute = 30;//used for testing purposes, in real build RTC wil give this value
//-----------------------------------------------------
void setup() {//ran once AKA welcome screen
  lcd.begin(16, 2);//sets the LCD screen dimentions up
  lcd.print(" Reef Minder ");
  lcd.setCursor(0,1);
  lcd.print("by Luke V1.00");
  delay(5000);
  lcd.clear();
}
//-----------------------------------------------------
void loop() {
  switch(menuOption){//loads each menu depending on what value "menuOption" has at the start of the loop.
    
    case 1:  mainMenuOneOne();break; 
    case 2:  mainMenuOneTwo();break; 
    
    case 3:  mainMenuTwoOne();break;
    case 4:  mainMenuTwoTwo();break;
    
    case 5:  setIntensityOne();break;
    case 6:  setIntensityTwo();break;
    case 7:  setIntensityThree();break;
    
    case 8:  setLightsOne();break; 
    case 9:  setLightsTwo();break;
    
    case 10: setTimePeriodOne();break;
    case 11: setTimePeriodTwo();break; 
    
    default: idleMenu();break;
  }   
}
//-----------------------------------------------------
void idleMenu(){//case 0
  //this is the idle screen which will be the ran as default, when the user hasnt pressed anything, after X amount of time if the user hasnt pressed anything load this menuOption
  lcd.setCursor(0,0);
  lcd.print("Temp:"); lcd.print(tankTemp);  lcd.print("*C ");//temp half, top line
  lcd.print(timeHour); lcd.print(":"); lcd.print(timeMinute);// time half, top line
  lcd.setCursor(0,1);
  lcd.print("WHT:");lcd.print(x);lcd.print(" BLU:");lcd.print(x);
  if(x <100){//used in testing, real value will come from the led's/set by the user in the SET intensity menu option
    x++;
    delay(5000);
    lcd.clear();
  } 
  //If any button pressed, load mainMenuOne()/ menuOption = 1;
}
//-----------------------------------------------------

void mainMenuOneOne(){ //case 1
  //main menu, 
  lcd.setCursor(0,0);
  lcd.print("1.SET LIGHTS   *");
  lcd.setCursor(0,1);
  lcd.print("2.VIEW PERAMS");
  lcd.setCursor(0,0); 
    
    
  /*if V pressed load menuOptionOneTwo();
    if ^ pressed do nothing
    if < pressed load idleMenu()/ menuOption = 0;
    if > pressed load setLightsOne();/ menuOption = 8;
    if * pressed load setLightsOne();/ menuOption = 9;
  */
}
void mainMenuOneTwo(){ //case 2
  //main menu, 
  lcd.setCursor(0,0);
  lcd.print("1.SET LIGHTS"); 
  lcd.setCursor(0,1);
  lcd.print("2.VIEW PERAMS  *");
  lcd.setCursor(0,0); 
  
    
  /*if V pressed load menuOptionTwoOne()/menuOption = 3;
    if ^ pressed load menuOptionOneOne()/menuOption = 2;
    if < pressed load idleMenu()/menuOption = 0;
    if > pressed load viewPerams(); not coded yet
    if * pressed load viewPerams(); not coded yet
  */
}
void mainMenuTwoOne(){// case 3
  lcd.setCursor(0,0);
  lcd.print("3.BLANK        *");
  //flashing pixel
  lcd.setCursor(0,1);
  lcd.print("4.BLANK");
  lcd.setCursor(0,0); 
 
 
  /*if V pressed load menuOptionTwoTwo()/menuOption = 4;
    if ^ pressed load menuOptionOneTwo()/menuOption = 2;
    if < pressed load idleMenu()/menuOption = 0;
    if > pressed load 3rd menu;/not coded yet
    if * pressed load 3rd menu()/not coded yet
  */
}

void mainMenuTwoTwo(){// case 4
  lcd.setCursor(0,0);
  lcd.print("3.BLANK");
  lcd.setCursor(0,1);
  lcd.print("4.BLANK        *");
  //flashing pixel
  lcd.setCursor(0,0); 


  /*if V pressed do nothing;
    if ^ pressed load menuOptionTwoOne()/menuOption = 3;
    if < pressed load idleMenu()/menuOption = 0;
    if > pressed load 4rd menu;/not coded yet
    if * pressed load 4th menu();/not coded yet
  */
}

//----------------------------------------------------

void setLightsOne(){// case 8
  lcd.setCursor(0,0);
  lcd.print("1.SET INTENSITY*");
  lcd.setCursor(0,1);
  lcd.print("2.SET TIMES");
  lcd.setCursor(0,0);


 /*if V pressed load setLightsTwo()/menuOption = 9;
    if ^ pressed do nothing 
    if < pressed load idleMenu()//menuOption = 0;
    if > pressed load setintensityOne()/menuOption = 5;
    if * pressed load setLightsTwo()/menuOption = 9;
  */ 
}


void setLightsTwo(){//case 9
  lcd.setCursor(0,0);
  lcd.print("1.SET INTENSITY"); 
  lcd.setCursor(0,1);
  lcd.print("2.SET TIMES    *");
  //flash pixel
  lcd.setCursor(0,0);
 
 
 /*if V pressed do nothing;
    if ^ pressed load setLightsOne()/menuOption = 8;
    if < pressed load mainMenuOneOne()/menuOption = 1;
    if > pressed load setTimeOne()/menuOption = 10;
    if * pressed load setTimeOne()/menuOption = 10;
  */ 
}

//----------------------------------------------------
void setIntensityOne(){// case 5
  lcd.setCursor(0,0);
  lcd.print("1. SET BLUE MAX"); 
  lcd.setCursor(0,1);
  lcd.print("   100%");
  lcd.setCursor(0,0);
  
  
   /*if V pressed value-- While => 0;
    if ^ pressed value++ while <= 100; 
    if < pressed do nothing;
    if > pressed load setIntenistyTwo()//menuOption = 6;
    if * pressed load setIntenistyTwo()/menuOption = 6;
  */
}

void setIntensityTwo(){//case 6
  lcd.setCursor(0,0);
  lcd.print("1. SET WHITE MAX"); 
  lcd.setCursor(0,1);
  lcd.print("   100%");
  lcd.setCursor(0,0); 
  
  
  /*if V pressed value-- While => 0;
    if ^ pressed value++ while <= 100; 
    if < pressed do nothing;
    if > pressed load setIntenistyThree()/menuOption = 7;
    if * pressed load setIntenistyThree()//menuOption = 7;
  */
}

void setIntensityThree(){//case 7
  lcd.setCursor(0,0);
  lcd.print("LIGHTS SET"); 
  lcd.setCursor(0,1);
  delay(5000);
  lcd.setCursor(0,0);
  menuOption = 1; 
 
 
  /*if V pressed do nothing;
    if ^ pressed do nothing; 
    if < pressed do nothing;
    if > pressed load mainMenuOne()/menuOption = 1;
    if * pressed load mainMenuOne()/menuOption = 1;
  */
}
//-------------------------------------------------  
void setTimePeriodOne(){//case 10
  lcd.setCursor(0,0);
  lcd.print("1.SET START    *");
  lcd.setCursor(0,1);
  lcd.print("2.SET END");
  lcd.setCursor(0,0); 
  
  /*if V pressed load setTimePeriodTwo()/menuOption = 11;
    if ^ pressed do nothing; 
    if < pressed load setLightsTwo()/menuOption = 9;
    if > pressed load setStartTime/not coded yet;
    if * pressed load setStartTime)/not coded yet
  */
}

void setTimePeriodTwo(){//case 11
  lcd.setCursor(0,0);
  lcd.print("1.SET START"); 
  lcd.setCursor(0,1);
  lcd.print("2.SET END      *");
  lcd.setCursor(0,0);
 
   /*if V pressed do nothing;
    if ^ pressed load setTimePeriodOne/menuOption = 10;
    if < pressed load setLightsTwo()/menuOption = 9;
    if > pressed load setEndTime/not coded yet
    if * pressed load setEndTime)/not coded yet
  */ 
}
//-------------------------------------------------

Hi Harlequin, I'm undergoing the same project as you so I'd thought I'd drop by. I'm still playing around with with the LCD and temperature probes at this point, so I'm still in the beginning. I'm currently working on getting a reading from two dallas temperature probes (DS18B20 in Parasite Mode) from the same pin using the onewire library.

I'm awaiting a real time clock and serial i2c for my 20x4 LCD screen. The clock will let me set the times for turning my lights on and off and the i2c will prevent the LCD from taking up so many of my precious i/o ports. I also need to buy a keypad to control it, but I haven't found one that I was particularly enthusiastic about yet.

I'm implementing mine into a running 120g tank. I'm using solid state relays to power on the lights or pumps which is where my project will vary a bit from your LED controlling.

I'll be looking forward to seeing how you go about the project, it's reassuring to see other's attempting the same project.

Hello Ludnix,

thanks for swinging by, this project hasnt gone any further since i last posted code wise as i've been too busy, Infact i was just about to sitdown and try and do some more coding. hense why i checked here.

looks like your further along then i am Ludnix as i've just started my project really, I've yet to order my RTC and also some Temp probes etc.

And then if i get that far, to work on solid state relays =]

you'll have to excuse my ignorance but whats "parasite mode" this is all completely new technology to me =].

about 3 hours later.....

Well i just had a rather sucessful few hours coding, managed to synq my keypressed recognition coding with my menu coding.

just need to write it up and i'll post some coding later tonight.

pretty awful video can be seen here:

(note, play it quietly as the sound quality is pretty awful and i had music playing int he background)

its no where near finished but atleast i've got over the huge hurdle that was interfacing the menu and the keypad input, i was struggling with calling the menus at the right time and when to "listen" for a keypress and what to do, got it sorted now though.

And for the record "phoenix" is the user name i go by on some of the fish forums i frequent.

all in all im pretty pleased with my progress, i kinda had a "if i did it this way.... OMG Im so stupid why didnt i think of that earlier" moment ^^.

Going to place an order for a few bits and bobs soon ish i think.

looking at RTC module and a few temp probes for now.

there seems to be a few RTC's out there and also a few different temp probes, does anyone have any idea's suggestions on which to order? the temp probes will be wrapped in heatshrink probably and a dab of glue/silicone at the end to encapsulate it, unless you can think of a better idea?.

also on a semi serious thought.

i've been tinkering with the idea of data recording actually. I know you can buy SD card shields but is there a way of using one of those few hundred small USB sticks people have knocking around? like those small 128 mb ones?

looks like i need to do some googling.

I assume you're familiar with this site, but it's where I'm basing my project off:
http://reefprojects.com/wiki/Main_Page

Parasite mode allows you to control several of the DS18B20 temperature probes using a single wire to the arduino (very valuable when there are so few ports!). I haven't gotten it to display the two probes I have connected separately yet, but that's really a matter of taking the time to learn the code used in the examples.

For my probes, you need a 4.7k resistor on the +5v lead, so I wired it all up and heat shrunk it. I then put it in a tube you can get at the pet store. It's like rigid air line tubing only slightly larger, then epoxied the ends closed.

I have all my relays now, but I'm still waiting on the RTC to arrive and the serial connector for the LCD.

How do you intend to control your other component with the LCD shield on the arduino? Can you control the relays and LCD on the same I/O ports? I have seen port doublers for sale, but I have no idea how the coding works or circuitry.

Here's a picture of my LCD running. I'm planning on building a black acrylic box to put the LCD and keypad in. I haven't picked the keypad out yet but I'm not sure what my options are for interfacing with the arduino.

Evening Ludnix, Yes i have seen the reefproject controller before,

Firstly the use of parasite mode sounds interesting especially if its possible to isolate each sensor as i was planning of having two sensors, 1 for the light rig 1 for the display tank ( inhonesty i dont need the light rig but i might as well, they only cost a few pounds or so per sensor,

As far as the use of relays is controlled, in honesty im not sure what im going to do, Im currently using an Arduino Mega so im hoping i have enough ports. if not i'll look at other ideas,

Im just about to place an order for 5x DS18B20 sensors ( its £3.60 for 2 or £7.60 for 5) and also place an order for a RTC module.

one thing that im alittle confused about is rewiring my LCD shield to different pins, Currenly i have it "bolted on" to the arduino ( like a true shield) but the problem is it uses up All my PWM pins, and im not entirely sure if each pin actually does something.

the LCD schematic can be found here http://www.ekitszone.com/download/lcd-keypad-schematic.pdf

could someone tell me which if any pins i can reposition to free up my PWM pins, and if any dont actually do anything... if that makes sense.

(and each time i see a blue 20 x 4 the more i think i want one)

as far as i can tell.....

the 5 pushbuttons go to the analog pin 0-4, the "reset button" and other stuff that i cant tell (led for one) takes up the 5 pins to the left of the analog pins (Reset,3v3,5v,gnd and vin)

these are fine (for now as they arent in the way)

but the 16 pins used for the LCD display use PWM pins 0-13,gnd and AREF, now from as far as i can tell on the schematics (though im rubbish at reading them) LCD pins 7-10 which fit to ardiunio PWM pins 6-9 are blanks? so if i used jumper leads on the others but didnt conect those 4 pins that frees up 4 PWM pins for my led rig?

....
please tell me that makes any sense lol,

what i want to do is rewire the shield using protoboards and jump leads/jumpers to free up as many ports as possible.

i'm currently not using any of my Digital pins which i assume i can use if i change my code correctly?

help would be appriciated

Are you sure your LCD isn't using any digital pins? Mine is only using the +5v on the analog side of the board, otherwise it's all connected to my digital pins (2-5, 9-13).

yeah My current shield uses none of the standard digital pins, but slots into all of the digital PWM pins.

I assume the input doesnt need PWM.


shield and arduino mega top down,

looking at the mega with the USB port to the left, analog pins facing you.

from left to right the pins that are used are as follows:-

reset
3V3
5V
GND
VIN

Anaglog IN pins 0-5

looking at the mega with the Digital PWM and Communication ports to you with the USB port to the right.

pins right to left pins used are:

AREF
GRD
PWM 13 - 8

PWM 7-0

could i simply use jumper leads to rewire all the current pins that are in the PWM to digital pins,

then rewrite the:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7)

to what ever digital pins i used.

see what i mean?

now that im looking at it IF LiquidCrystal lcd(8, 9, 4, 5, 6, 7) variables are used to define the LCD, and 2 pins stick in the AREF and GND....what does pin 0-3 and 13-10? i need to sit and read the schematic again.. but not now tomorrow when i can think straight lol

I imagine the LCD is communicating with the arduino over i2c then. I think your idea would work, but looking at the schematic should clear it up.

They do sell a pin doubler at liquid ware which would allow the shield to go over the arduino but duplicate the pins so you can actually use them. It's about $18. It might be worth considering depending on how you want to do the wiring, but it would be the same as if you just ran jumpers out to a breadboard.
http://www.liquidware.com/shop/show/DWX/DoubleWide+ExtenderShield

I got a i2c board to interface with the LCD and communicate with my arduino today. it only requires 4 wires go to the arduino, but there isn't an existing library to work with the controller yet. I'm waiting for the lcd and keypad controller to come from web4robot.com, which has a working library, but it's already been 2 weeks with no response from them.

Quotes "I imagine the LCD is communicating with the arduino over i2c then."

i'll take your word for it :P, after a quick google, i ended up alittle confused and just took it at face value, my lcd is i2C haha, if anyone has a laymans explaination id appriciate it.

I had my physics/techie friend come round for lunch today and showed him my progress with the arduino which he was pretty impressed, he's pretty good at reading schematics etc and he's coming over for dinner this sunday so im sure i can pick his brains a bit more about it then, i plan to move it to some protoboards and hopefully connect up some LED's to mimic my LED rig. ( i need to steal his/my electronics bits box, most of the DIY projects i've done have been at his house so i just left all my electronics at his, resitors, led's, proto boards wire, solder etc...)

Put a bid on some DS18B20 chips (x5) earlier today so i'll probably win them, if not i'll jsut bid on the next lot until i get some. £7.60 intotal but the postage is a bit of a b***h and can take anywhere between 10-20 days, hopefully sooner. I looked around to see if there were any stockpiles in the UK i could order from but they were hellishly exspensive compaired to these ones from HK. I dont want them that badly to warent the cost.

Going to order my RTC clock in a moment as well, hopefully this will come sooner as theres a few suppliers in the uk that sell them for around £12. just trying to think if i want anything else while i order.

Think thats about it.... wondering if i can justify buying a 20x4 plus a key... ;D

out of interest how easy is it to make a RTC module by scrach?
I can buy the Chip and crystal for 1/3rd of the price of a prefabricated module?

I'd have to get a cell battery and holder as well but that would be no more then a few Pounds?

I wonder how difficult would it be to program/build? or should i just go ahead and buy a pre made one and save myself some trouble?

anyone got a decent DIY tutorial etc?

edit: RTC schematics from sparkfun

as long as i get these bits and bobs and have a pre programmed DS1307 chip i should be on a winner no? just seems alittle expensive for something that looks like it could be done with a few hours DIY'ing...

second edit: I dont even need a pre programmed chip... i could set the variables myself, the chip does the auto calibrate/configure for me... thats the whole point.

third edit some hours later: Won the DS18B20 chips, so i have 5 of those on the way sometime this side of 20 days the wait begins :-?

You can definitely build your own RTC, I just wanted one that was on a PCB for compact size.
I ordered mine from Futurlec, but they take a very long time to ship as well. web4robot contacted me and told me my i2c controller for my LCD will ship Monday, so at least there's progress.

I don't know if I had asked this yet, but do you have an plans for enclosing the controller? I'm thinking about using black acrylic and building my own box, but I don't have the best tools for cutting. I checked out a lot of project boxes locally, but didn't find anything appropriately sized.

I saw this and thought it seemed like what you were talking about:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235070596

Thanks Ludnix, that thread you posted below is perfect for what i need, going to place an order for some parts probably in a moment. as far as soldering it and keeping it compact, that shouldnt be a problem, i bet you could get it down to about the size of 1" x 2" square if not smaller, (depends how confident you are to solder on 2 sides of some curcuit board) i've done enough soldering to be prett confident on getting it down to a minimum.

Secondly, i havent given much thought to encasing it, obviously i want it as small as possible im tempted to do it in 2 boxes, 1 with the controller and the electronics, the second with just the LCD screen and keypad etc, with a short cable linking the two (which i'll make desconectable) i could then mount the LCD into my stand/cupboard what ever and have the box hidden.

failing that theres some bigish project boxes i can get locally. infact some are huge, i'd like to do it in a custom built package but again i think id struggle getting the plastic cut to size, do you have any shops local that could cut it for you? i mean i thi nk its safe to say we're both pretty far off from that stage but still :P.

I got told my DS18B20's got shipped yesterday and should be with me in 2-3 weeks. so thats good news.

well after spending about 1 hour or so trawling through electronic sites to try adn find a supplier who sells everything i need i finally found one and the cost was pretty good.

For £8.51(that includes P&P first class) i got all the little bits and bobs i needed for a RTC module,

the cheapest supplier of "arduino" parts wanted £5 plus P&P for the DS1307 chip and 32.7 kHZ crystal.

the cheapest supplier of a prefabricated PCB RTC was £13+ P&P,

i got:-

DS1307 Chip
IC 8 pin Chip holder (its an extra £0.08, saves me ruining a chip...)
CR2032 coin cell battery
CR2032 batter holder (we'll see on this one depends how big it is etc there was no photo, i might swap it out for a "slim line" one if its no good, it was only £0.40 so at the end of the world its not desasterous.)
32.768 kHZ watch crystal

plus because as i was ordering, i threw in a few led's for kicks/proto typing, i never have any spare led's and maplins my closest electronics store charges £1.23 for a 5mm .... i got 1 of each, red,yellow,green,blue, ultra bright white and pink (yeah they did a pink one.... havent seen one of those often...)

and i should hopefully have those by next week if all goes to plan, it will keep me out of trouble till i get my temp Chips ;D

I just got my RTC from futurlec, I haven't wired it up yet, but you're right about the size. It's much bigger than I imagined and making it yourself should actually save space. The printed board they use has a lot of wasted space.

I'm going to play with the clock and see about writing some code to turn a relay on and off based on time, but other than that, I'm just waiting for my controller for the lcd and keypad, and the actual keypad itself and I should have all my components.

man thats unlucky with your prefabed one, ah well least you have it to play with, although i havnet really looked at the RTC coding i would have thought it would be a pretty simple task to code it to turn on a relay and off at a certain point.

i did a quick search at probes today looks like i can pick up a PH probe for about £15-20 but trying to find any other types were pretty difficult.

but then i knew that really from looking at other projects.

It looked like they were having difficulty making a pH probe circuit that didn't require 2x 9v batteries, but I didn't look to far into it. I'm not going to be building a pH probe as it's never been an issue or concern for me. I have a nice hand held probe that I use for the occasional testing.

I played with the clock library and got it to display the set time on the screen, I'm not sure how I keep the clock set, it doesn't seem to work if I take out the code to set the time, but obviously I wouldn't it want it to set to the same exact time everytime it powers up since that will change.

Here's the code I'm using if anyone has any input on reading the clock's date. It seems like I should be able to set the clock once, and have it remember the time until the battery runs out right?

#include <LiquidCrystal.h>
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

// Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int backLight = 13;    // pin 13 will control the backlight

void setup()
{
  //CLOCK
  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,55);     //set the minutes
  RTC.set(DS1307_HR,3);       //set the hours
  RTC.set(DS1307_DOW,6);       //set the day of the week
  RTC.set(DS1307_DATE,16);       //set the date
  RTC.set(DS1307_MTH,4);        //set the month
  RTC.set(DS1307_YR,10);         //set the year
  RTC.start();
  //LCD
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(4,20);              // rows, columns.  use 2,16 for a 2x16 LCD, etc.
  lcd.clear();                  // start with a blank screen
  lcd.setCursor(0,0);           // set cursor to column 0, row 0 (the first row)
  lcd.print("Aquarium Controller");    // change this text to whatever you like. keep it clean.
  lcd.setCursor(7,1);           // set cursor to column 0, row 1
  lcd.print("Ludnix");
  delay(3000);
}

void loop()
{
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Aquarium Controller");
 lcd.setCursor(0,1);
 lcd.print("");
 lcd.setCursor(0,2);
 lcd.print("");
 lcd.setCursor(0,3);
 lcd.print(RTC.get(DS1307_HR,true));
 lcd.print(":");
 lcd.print(RTC.get(DS1307_MIN,false));
 lcd.print(":");
 lcd.print(RTC.get(DS1307_SEC,false));
 delay(1000);
}

EDIT:

Nevermind, removing that section that sets the time in the setup does work for keeping time. I just happened to look when the time was 0 and thought it wasn't working!

I got the two temperature probes working and modified the clock to display in a 12hr style instead of military. I also ordered the Ethernet shield they sell at the website you linked where you got the LCD shield. Should be fun to play around with the networking side of it.

looking excellent and wow i just noticed how big your RTC module is, even by most thats pretty big considering the size of the components, what are those 3 yellow bars though they look almost like jumpers? if thats the case i might need to order some more bits d'oh

i'll most likely be pestering you questions on the temp probes and the Real time clock module once i get my bits, but it looks like we are pretty level regarding our progress (ok your alittle ahead).

now see the ethernet shield was something i personnally didnt really see much purpose to in this perticular build, what do you plan to network it to? another controller/Hub a proper pc? etc....

you thought about doign anyform of data logging? i'd like to use a standard USB stick for memory failing that an SD card.

Oh its exciting where to go next XD

also noticed your using a Duelamore(probable horribly butchered spelling mistake but im tired and CBA to check...you know what i mean) Looks like you might need to upgrade to a mega soon its looking pretty cramped :wink: