123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- * SyncArduinoClock.
- *
- * SyncArduinoClock is a Processing sketch that responds to Arduino
- * requests for time synchronization messages. Run this in the
- * Processing environment (not in Arduino) on your PC or Mac.
- *
- * Download TimeSerial onto Arduino and you should see the time
- * message displayed when you run SyncArduinoClock in Processing.
- * The Arduino time is set from the time on your computer through the
- * Processing sketch.
- *
- * 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.*;
- import java.util.Date;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- public static final short portIndex = 0; // select the com port, 0 is the first port
- public static final String TIME_HEADER = "T"; //header 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);
- println(getTimeNow());
- }
- void draw()
- {
- textSize(20);
- textAlign(CENTER);
- fill(0);
- text("Click to send\nTime Sync", 0, 75, 200, 175);
- 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(String header, long time) {
- String timeStr = String.valueOf(time);
- myPort.write(header); // send header and time to arduino
- myPort.write(timeStr);
- myPort.write('\n');
- }
- long getTimeNow(){
- // java time is in ms, we 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;
- }
|