Arduino: Time: Difference between revisions
From OnnoCenterWiki
Jump to navigationJump to search
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 31: | Line 31: | ||
/* | |||
* 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 2013 | |||
T1357041600 | |||
* | |||
* A Processing example sketch to automatically send the messages is included in the download | |||
* On Linux, you can use "date +T%s\n > /dev/ttyACM0" (UTC time zone) | |||
*/ | |||
#include <TimeLib.h> | |||
#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); | |||
while (!Serial) ; // Needed for Leonardo only | |||
pinMode(13, OUTPUT); | |||
setSyncProvider( requestSync); //set function to call when sync required | |||
Serial.println("Waiting for 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 the time | |||
Serial.print(now()); | |||
Serial.print(" "); | |||
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() { | |||
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 the integer is a valid time (greater than Jan 1 2013) | |||
setTime(pctime); // Sync Arduino clock to the time received on the serial port | |||
} | |||
} | |||
} | |||
time_t requestSync() | |||
{ | |||
Serial.write(TIME_REQUEST); | |||
return 0; // the time will be sent later in response to serial mesg | |||
} | |||
==Dari Linux PC== | |||
Lakukan | |||
date +T%s\n > /dev/ttyACM0 | |||
Untuk mensinkronisasi waktu | |||
==Referensi== | ==Referensi== | ||
Latest revision as of 03:05, 27 February 2016
Sumber:
Download & Install Library
Download
- https://github.com/PaulStoffregen/Time/archive/master.zip
- http://playground.arduino.cc/uploads/Main/DS1302RTC.zip
- https://github.com/PaulStoffregen/DS1307RTC/archive/master.zip
Lakukan
cp Time-master.zip /usr/share/arduino/libraries/ cd /usr/share/arduino/libraries/ unzip Time-master.zip mv Time-master Time
cp DS1302RTC.zip /usr/share/arduino/libraries cd /usr/share/arduino/libraries/ unzip DS1302RTC.zip
cp DS1307RTC-master.zip /usr/share/arduino/libraries cd /usr/share/arduino/libraries/ unzip DS1307RTC-master.zip mv DS1307RTC-master DS1307RTC
Code
/*
* 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 2013
T1357041600
*
* A Processing example sketch to automatically send the messages is included in the download
* On Linux, you can use "date +T%s\n > /dev/ttyACM0" (UTC time zone)
*/
#include <TimeLib.h>
#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);
while (!Serial) ; // Needed for Leonardo only
pinMode(13, OUTPUT);
setSyncProvider( requestSync); //set function to call when sync required
Serial.println("Waiting for 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 the time
Serial.print(now());
Serial.print(" ");
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() {
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 the integer is a valid time (greater than Jan 1 2013)
setTime(pctime); // Sync Arduino clock to the time received on the serial port
}
}
}
time_t requestSync()
{
Serial.write(TIME_REQUEST);
return 0; // the time will be sent later in response to serial mesg
}
Dari Linux PC
Lakukan
date +T%s\n > /dev/ttyACM0
Untuk mensinkronisasi waktu