OK - Where to start??
The first thing I needed to do was convince myself that I could actually display anything at all on an LCD Display driven by an Arduino.
I will at least start all my development on an Arduino UNO Board - they're small, cheap and have enough connections to at least get me started - and the real reason is, I've got a couple already lying around, so may as well use them. And the code between the UNO should work with no changes if/when I upgrade to the Mega.
And the display?
I went with the standard Hitachi 44780 - mainly because its the most popular and there are good learning resources on the Arduino Web Site - and the LiquidCrystal Arduino Library has been written for these. I started off just using the 16 character x 2 line display, but when I put the clock together I'll probably use bigger ones - they are pretty cheap - you can get them on eBay for 3 or 4 dollars each - so I might use 2 or 3 of them on the final clock.
So I began researching the interface between the Arduino UNO and the 44780 - turns out to be fairly straight forward - but the connections can be fiddly so I bought myself an Arduino Experimenters Platform. It was only 10 dollars and made life a lot easier.
If you follow the instructions here - you should be able to have your LCD Display hooked up to your Arduino and displaying within a couple of hours or so....
Once I was happy that I could send signals from the Arduino to the LCD I then needed to learn how to get signals from an external source and read them into the Arduino - and of course then I could write them out to display on the LCD.
It seemed to me that the easiest way to do this was just plug in the Temp/Humidity Sensor and see how it went.
I bought myself a DHT21 Temperature Humidity Sensor.
Once again - it's pretty straitforward. You will find full instructions for connecting it, and examples sketches here Yes I know the DHT11 as used in the photographs looks different - but it is still part of the DHTxx family so has the same connections and software interface so you should have no worries.
The examples are pretty clear and the DHT Library works no worries - so it you are lucky, like I was - you'll be reading Temperature and Humidity data within a couple of hours. The biggest problem for me was that I live in the Tropics, and when I first connected it up it was showing 100% humidity - I thought that couldn't be right so then I went checking all sorts of things to find "the problem" - turns out it was right and I wasted all that time chasing a non-existent problem.
So once I was reading the data from the sensor - it was trivial to write it out to the LCD as I had learned how to do that in the previous step.
Here's a couple of photos of my Arduino Experimenters Platform with the DHT21 wired up and displaying it's output on an LCD Display. It was much less humid that day :)
It was about this point I ran into a bit of a problem, not a world shattering dilemma, but something I needed to have a good think about.
I was using an Arduino UNO, and I wanted to use a couple of LCD displays with it. The trouble was that the Arduino doesn't have enoungh connectors to connect both displays. I think I mentioned earlier that I might give up on the UNO and just use an Arduino MEGA, that has many more connections, but hey, where's the fun in that....
I decided to try and stay with the UNO, and see if I could somehow double up on the connections. When I was previously experimenting with the 44780 LCD screen I noted an ENABLED pin that made me think I might be able to select different screens for the output.
So I tried an experiment - I hooked up two separate 44780 LCD Screens - one a 2 line and the other a 4 line. I connected the data lines on each screen to pins 1, 2, 3, 4 and (Reset )12 on the UNO - but the 2 line had its ENABLED pin connected to the UNO pin 10 and the 4 line had its ENABLED pin connected to UNO pin 11.
And then, when I wanted to write to a specific LCD screen I just set the appropriate ENABLED pin and the output went to the correct screen, leaving the other one unaffected.
Here is example code.....
#include <LiquidCrystal.h>
// First - initialize the library with the numbers of the interface pins:
LiquidCrystal lcd2line(12, 10, 1, 2, 3, 4);
LiquidCrystal lcd4line(12, 11, 1, 2, 3, 4);
// set up the LCD's number of columns and rows:
lcd2line.begin(16, 2);
lcd4line.begin(20, 4);
//Clear both screens ready for text
lcd2line.clear();
lcd4line.clear();
//Write text - First to the 2 Line Screen then to the 4 line screen
lcd2line.print("Hello World!!!");
lcd4line.print("Hello World Again!!!");
Here is a photo of the circuit as it stands now - but its really crowded and messy, so you might not see a lot. If you have any questions about how this is connected - please eMail me at the eMail address shown on the Contact page. Ignore the very poor display on the 4 Line LCD display, it looks great in real life, and I only have one resistor variable resistor attached for both of the screens so when I adjust one screen to appear great, the other is not so great. But on the finished clock I will have a contract adjusting resistor for each of the screens for optimum clarity.
So really, now that I can output to both screens individually, and read/process the Temp/Humidity Sensor - the only thing left to do is start work on the GPS module - actually hooking up the GPS Module, getting it to talk to the GPS Satellites and formatting the signals to display the correct Date and Time - and Latitude and Longtitude. Actually, when I say it like that - it sounds a bit daunting - oh well - onwards brave souls.