I'm trying to update time on the arduino using a processing sketch and an arduino sketch from: [url]
http://playground.arduino.cc/Code/time[/url]
Neither of them will compile, I think it's because of newer versions not including files older ones did so I'd need yo write a few includes but not sure. Here are the sketches:
ARDUINO
- / * 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
- */
- #include <Time.h>
- #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
- Serial.println("Waiting for sync message");
- }
- void loop(){
- if(Serial.available() )
- {
- processSyncMessage();
- }
- if(timeStatus()!= timeNotSet)
- {
- digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh
- digitalClockDisplay();
- }
- delay(1000);
- }
- void digitalClockDisplay(){
- // digital clock display of the time
- Serial.print(hour());
- printDigits(minute());
- printDigits(second());
- Serial.print(" ");
- Serial.print(day());
- Serial.print(" ");
- Serial.print(month());
- Serial.print(" ");
- Serial.print(year());
- Serial.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
- }
PROCESSING
- /**
- * SyncArduinoClock.
- *
- * portIndex must be set to the port connected to the Arduino
- *
- * The current time is sent in response to request message from Arduino
- * or by clicking the display window
- *
- * The time message is 11 ASCII text characters; a header (the letter 'T')
- * followed by the ten digit system time (unix time)
- */
- import processing.serial.*;
- public static final short portIndex = 1; // select the com port, 0 is the first port
- public static final char TIME_HEADER = 'T'; //header byte for arduino serial time message
- public static final char TIME_REQUEST = 7; // ASCII bell character
- public static final char LF = 10; // ASCII linefeed
- public static final char CR = 13; // ASCII linefeed
- Serial myPort; // Create object from Serial class
- void setup() {
- size(200, 200);
- println(Serial.list());
- println(" Connecting to -> " + Serial.list()[portIndex]);
- myPort = new Serial(this,Serial.list()[portIndex], 9600);
- }
- void draw()
- {
- if ( myPort.available() > 0) { // If data is available,
- char val = char(myPort.read()); // read it and store it in val
- if(val == TIME_REQUEST){
- long t = getTimeNow();
- sendTimeMessage(TIME_HEADER, t);
- }
- else
- {
- if(val == LF)
- ; //igonore
- else if(val == CR)
- println();
- else
- print(val); // echo everying but time request
- }
- }
- }
- void mousePressed() {
- sendTimeMessage( TIME_HEADER, getTimeNow());
- }
- void sendTimeMessage(char header, long time) {
- String timeStr = String.valueOf(time);
- myPort.write(header); // send header and time to arduino
- myPort.write(timeStr);
- }
- long getTimeNow(){
- // java time is in ms, we want secs
- GregorianCalendar cal = new GregorianCalendar();
- cal.setTime(new Date());
- int tzo = cal.get(Calendar.ZONE_OFFSET);
- int dst = cal.get(Calendar.DST_OFFSET);
- long now = (cal.getTimeInMillis() / 1000) ;
- now = now + (tzo/1000) + (dst/1000);
- return now;
- }
1