Question on processing and Arduino..


i have uploaded sketch in arduino (timeserial sketch):


/*
 * timeserial.pde
 * example code illustrating time library set through serial port messages.
 *
 * messages consist of letter t followed ten digit time (as seconds since jan 1 1970)
 * can send text on next line using serial monitor set clock noon jan 1 2013
 t1357041600 
 *
 * processing example sketch automatically send messages inclided in download
 * on linux, can use "date +t%s\n > /dev/ttyacm0" (utc time zone)
 */
 
#include <time.h> 

#define time_header  "t"   // header tag serial time sync message
#define time_request  7    // ascii bell character requests time sync message

void setup()  {
  serial.begin(9600);
  while (!serial) ; // needed leonardo only
  pinmode(13, output);
  setsyncprovider( requestsync);  //set function call when sync required
  serial.println("waiting sync message");
}

void loop(){   
  if (serial.available()) {
    processsyncmessage();
  }
  if (timestatus()!= timenotset) {
    digitalclockdisplay(); 
  }
  if (timestatus() == timeset) {
    digitalwrite(13, high); // led on if synced
  } else {
    digitalwrite(13, low);  // led off if needs refresh
  }
  delay(1000);
}

void digitalclockdisplay(){
  // digital clock display of 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 digital clock display: prints preceding colon , leading 0
  serial.print(":");
  if(digits < 10)
    serial.print('0');
  serial.print(digits);
}


void processsyncmessage() {
  unsigned long pctime;
  const unsigned long default_time = 1357041600; // jan 1 2013

  if(serial.find(time_header)) {
     pctime = serial.parseint();
     if( pctime >= default_time) { // check integer valid time (greater jan 1 2013)
       settime(pctime); // sync arduino clock time received on serial port
     }
  }
}

time_t requestsync()
{
  serial.write(time_request); 
  return 0; // time sent later in response serial mesg
}

and code (sync arduino clock) on processing ide:

/**
 * syncarduinoclock.
 *
 * portindex must set port connected arduino
 *
 * current time sent in response request message arduino
 * or clicking display window
 *
 * time message 11 ascii text characters; header (the letter 't')
 * followed ten digit system time (unix time)
 */
 

import processing.serial.*;
import java.util.date;
import java.util.calendar;
import java.util.gregoriancalendar;

public static final short portindex = 0;  // select com port, 0 first port
public static final string time_header = "t"; //header 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 serial class

void setup() { 
  size(200, 200);
  println(serial.list());
  println(" connecting -> " + "com16");
  myport = new serial(this,"com16", 9600);
  println(gettimenow());
}

void draw()
{
  textsize(20);
  textalign(center);
  fill(0);
  text("click send\ntime sync", 0, 75, 200, 175);
  if ( myport.available() > 0) {  // if data available,
    char val = char(myport.read());         // read , store 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 time request
    }
  } 
}

void mousepressed() { 
  sendtimemessage( time_header, gettimenow());   
}


void sendtimemessage(string header, long time) { 
  string timestr = string.valueof(time); 
  myport.write(header);  // send header , time arduino
  myport.write(timestr);
  myport.write('\n'); 
}

long gettimenow(){
  // java time in ms, want secs   
  date d = new date();
  calendar cal = new gregoriancalendar();
  long current = d.gettime()/1000;
  long timezone = cal.get(cal.zone_offset)/1000;
  long daylight = cal.get(cal.dst_offset)/1000;
  return current + timezone + daylight;
}




when run processing code window pops-up saying: "click send time sync"


someone expect 1 click inside window, real time data passes arduino serially.
instead of have run processing code, copy time value @ moment, e.g 1429728597 (seconds past 1 jan 1970 - value corresponds today 22/4/2015) , after closing processing window, open arduino serial monitor , paste value letter "t" before it. n't there easier way pass data arduino? do wrong?

quote
where do wrong?
is arduino connected com16? should not connecting name. serial.list() method returns list. should using serial.list()[n] port name, n correct index arduino's port.


Arduino Forum > Using Arduino > Programming Questions > Question on processing and Arduino..


arduino

Comments