Time Clock Testing For LCD

hey guys
i have made a time clock test
it uses the time and liquid crystal libarys
i thinks there is a few bugs in it.
can you please test this out on your display.
requires time lib and prosessing for serial connection as of it being based on TimeSerial.pde
bugs i think there is are the waiting for sync message

thanks ryan

/*

  • TimeSerial.pde
  • example code illustrating Time library set through serial port messages.
  • Messages consist of the letter T followed by ten digit time (as seconds since Jan 1 1970)
  • you can send the text on the next line using Serial Monitor to set the clock to noon Jan 1 2010
    T1262347200
  • A Processing example sketch to automatically send the messages is inclided in the download
    /
    /

    *Modified To Add Liquid Crystal Support
    *By Ryan Walmsley
    *Ryanteck.co.uk
    */

#include <Time.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER 'T' // Header tag for serial time sync message
#define TIME_REQUEST 7 // ASCII bell character requests a time sync message

void setup() {
Serial.begin(9600);
setSyncProvider( requestSync); //set function to call when sync required
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
lcd.println("Waiting for sync");
}

void loop(){
if(Serial.available() )
{
processSyncMessage();
}
if(timeStatus()!= timeNotSet)
{
digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh
lcd.setCursor(0, 0);
digitalClockDisplay();
lcd.setCursor(0, 1);
digitaldateDisplay();

}
delay(1000);
}

void digitalClockDisplay(){

// digital clock display of the time
lcd.print("Time: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.print(" ");
}
void digitaldateDisplay(){
// display date on line 1
lcd.print("Date:");
lcd.print(" ");
lcd.print(day());
lcd.print(" ");
lcd.print(month());
lcd.print(" ");
lcd.print(year());
lcd.println();
}

void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}

void processSyncMessage() {
// if time sync available from serial port, update time and return true
while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
char c = Serial.read() ;
Serial.print(c);
if( c == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( c >= '0' && c <= '9'){
pctime = (10 * pctime) + (c - '0') ; // convert digits to a number
}
}
setTime(pctime); // Sync Arduino clock to the time received on the serial port
}
}
}

time_t requestSync()
{
Serial.print(TIME_REQUEST,BYTE);
return 0; // the time will be sent later in response to serial mesg
}

all done

use this code please

/*

  • lcdtimeserial.pde
    *shows time on a display using LC & Time Library's
    *requires time stamp to be sent via serial console or processing script
    *lcd additon coded by Ryanteck.co.uk
    */
    // include time libary
    #include <Time.h>
    // include liquid crystal libary
    #include <LiquidCrystal.h>
    // set pins for liquid crystal libary
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    // time sync to PC is HEADER followed by unix time_t as ten ascii digits
    #define TIME_MSG_LEN 11
    // Header tag for serial time sync message
    #define TIME_HEADER 'T'
    // ASCII bell character requests a time sync message
    #define TIME_REQUEST 7
    // run setup script
    void setup() {
    // set seiral port
    Serial.begin(9600);
    //set function to call when sync required
    setSyncProvider( requestSync);
    // set up the LCD's number of rows and columns:
    lcd.begin(16, 2);
    // print loading text
    lcd.setCursor(0, 0);
    lcd.print("Time LCD Script");
    lcd.setCursor(0, 1);
    lcd.print("By Ryanteck.co.uk");
    // delay for 5 seconds
    delay(5000);
    // write waiting for sync
    lcd.setCursor(0, 0);
    lcd.print("Waiting For Time");
    lcd.setCursor(0, 1);
    lcd.print("From Computer");
    }
    // end of setup
    //start time update when time is grabbed
    void loop(){
    // check if time is uploaded from computer
    if(Serial.available() )
    {
    // proscess the time from computer
    processSyncMessage();
    }
    if(timeStatus()!= timeNotSet)
    {
    // turn on pin 13 light if time is set
    digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh
    // set lcd to 0,0 to write time
    lcd.setCursor(0, 0);
    digitalClockDisplay();
    // set lcd to 0,0 to write date
    lcd.setCursor(0, 1);
    digitaldateDisplay();

}
delay(1000);
}

void digitalClockDisplay(){

// display time on line 0
//print time:
lcd.print("Time: ");
//print hour
lcd.print(hour());
// print :
lcd.print(":");
//print minute
lcd.print(minute());
// print :
lcd.print(":");
//print seconds
lcd.print(second());

}
void digitaldateDisplay(){
// display date on line 1
//print date:
lcd.print("Date:");
//print
lcd.print(" ");
//print day
lcd.print(day());
//print /
lcd.print("/");
//print month
lcd.print(month());
//print /
lcd.print("/");
//print year
lcd.print(year());
lcd.println();
}

void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}

void processSyncMessage() {
// if time sync available from serial port, update time and return true
while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
char c = Serial.read() ;
Serial.print(c);
if( c == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( c >= '0' && c <= '9'){
pctime = (10 * pctime) + (c - '0') ; // convert digits to a number
}
}
setTime(pctime); // Sync Arduino clock to the time received on the serial port
}
}
}

time_t requestSync()
{
Serial.print(TIME_REQUEST,BYTE);
return 0; // the time will be sent later in response to serial mesg
}

What have you got running that is supposed to answer the sync request?

where it says waiting for sync i changed it to waiting for time and date which casued a few errors, i did not include it as of it being a bug
the video can be seen here

The requestSync() methods sends a string of data to the serial port. There is supposed to be a Processing sketch running on the PC that listens to the serial port that the Arduino is talking to. The processing sketch is supposed to get the date/time from the PC and send it back to the Arduino.

You don't have that Processing sketch running, do you?

yes i did
where it outputs to the monitor the waiting for sync
i tryed to change that to work over both the lines on the lcd

il be changing to use both serial and lcd for that and display on serial connection established, im currently rewriting the whole code by hand to understand it and make it shorter

il be changing to use both serial and lcd for that and display on serial connection established

Keep in mind that the Processing application needs to be on the other end of the serial port, so don't plan on some other application, like Serial Monitir, being able to connect to the serial port, too.

processing displays both input and output serial data.
looking at it im going to set pin 13 as on when time is known and off when time is lost

almost rewrote all code, took out some parts and made it faster ( hopefully )[timestamp=1291046601]

All finished new code updated at 2nd post. new video might be uploaded

thank you
ryan walmsley