mirror of
https://github.com/KevinMidboe/Arduino.git
synced 2026-04-25 08:14:06 +00:00
Init commit with many years of arduino sketches and projects. I dont know if the esp8266 includes much, but there are also libraries. I hope they dont have crazy automatic versioning through the Arduino IDE.
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
SyncArduinoClock is a Processing sketch that responds to Arduino requests for
|
||||
time synchronization messages.
|
||||
|
||||
The portIndex must be set the Serial port connected to Arduino.
|
||||
|
||||
Download TimeSerial.pde 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.
|
||||
82
Projects/libraries/Installed_libs/Time/Examples/TimeGPS/TimeGPS.pde
Executable file
82
Projects/libraries/Installed_libs/Time/Examples/TimeGPS/TimeGPS.pde
Executable file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* TimeGPS.pde
|
||||
* example code illustrating time synced from a GPS
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Time.h>
|
||||
#include <TinyGPS.h> //http://arduiniana.org/libraries/TinyGPS/
|
||||
#include <NewSoftSerial.h> //http://arduiniana.org/libraries/newsoftserial/
|
||||
// GPS and NewSoftSerial libraries are the work of Mikal Hart
|
||||
|
||||
TinyGPS gps;
|
||||
NewSoftSerial serial_gps = NewSoftSerial(3, 2); // receive on pin 3
|
||||
|
||||
const int offset = 1; // offset hours from gps time (UTC)
|
||||
time_t prevDisplay = 0; // when the digital clock was displayed
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
serial_gps.begin(4800);
|
||||
Serial.println("Waiting for GPS time ... ");
|
||||
setSyncProvider(gpsTimeSync);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
while (serial_gps.available())
|
||||
{
|
||||
gps.encode(serial_gps.read()); // process gps messages
|
||||
}
|
||||
if(timeStatus()!= timeNotSet)
|
||||
{
|
||||
if( now() != prevDisplay) //update the display only if the time has changed
|
||||
{
|
||||
prevDisplay = now();
|
||||
digitalClockDisplay();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
time_t gpsTimeSync(){
|
||||
// returns time if avail from gps, else returns 0
|
||||
unsigned long fix_age = 0 ;
|
||||
gps.get_datetime(NULL,NULL, &fix_age);
|
||||
unsigned long time_since_last_fix;
|
||||
if(fix_age < 1000)
|
||||
return gpsTimeToArduinoTime(); // return time only if updated recently by gps
|
||||
return 0;
|
||||
}
|
||||
|
||||
time_t gpsTimeToArduinoTime(){
|
||||
// returns time_t from gps date and time with the given offset hours
|
||||
tmElements_t tm;
|
||||
int year;
|
||||
gps.crack_datetime(&year, &tm.Month, &tm.Day, &tm.Hour, &tm.Minute, &tm.Second, NULL, NULL);
|
||||
tm.Year = year - 1970;
|
||||
time_t time = makeTime(tm);
|
||||
return time + (offset * SECS_PER_HOUR);
|
||||
}
|
||||
120
Projects/libraries/Installed_libs/Time/Examples/TimeNTP/TimeNTP.pde
Executable file
120
Projects/libraries/Installed_libs/Time/Examples/TimeNTP/TimeNTP.pde
Executable file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Time_NTP.pde
|
||||
* Example showing time sync to NTP time source
|
||||
*
|
||||
* This sketch uses the Ethenet library with the user contributed UdpBytewise extension
|
||||
*/
|
||||
|
||||
#include <Time.h>
|
||||
#include <Ethernet.h>
|
||||
#include <UdpBytewise.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
|
||||
#if UDP_TX_PACKET_MAX_SIZE <64 || UDP_RX_PACKET_MAX_SIZE < 64
|
||||
#error : UDP packet size to small - modify UdpBytewise.h to set buffers to 64 bytes
|
||||
#endif
|
||||
/*
|
||||
*
|
||||
* You may need to modify the UdpBytewise.h library to allow enough space in the buffers for the NTP packets.
|
||||
* Open up UdpBytewse.h and set the following buffers to 64 bytes:
|
||||
* #define UDP_TX_PACKET_MAX_SIZE 64
|
||||
* #define UDP_RX_PACKET_MAX_SIZE 64
|
||||
*/
|
||||
|
||||
|
||||
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
|
||||
byte ip[] = { 192, 168, 1, 44 }; // set the IP address to an unused address on your network
|
||||
|
||||
byte SNTP_server_IP[] = { 192, 43, 244, 18}; // time.nist.gov
|
||||
//byte SNTP_server_IP[] = { 130,149,17,21}; // ntps1-0.cs.tu-berlin.de
|
||||
//byte SNTP_server_IP[] = { 192,53,103,108}; // ptbtime1.ptb.de
|
||||
|
||||
|
||||
time_t prevDisplay = 0; // when the digital clock was displayed
|
||||
const long timeZoneOffset = 0L; // set this to the offset in seconds to your local time;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Ethernet.begin(mac,ip);
|
||||
Serial.println("waiting for sync");
|
||||
setSyncProvider(getNtpTime);
|
||||
while(timeStatus()== timeNotSet)
|
||||
; // wait until the time is set by the sync provider
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
if( now() != prevDisplay) //update the display only if the time has changed
|
||||
{
|
||||
prevDisplay = now();
|
||||
digitalClockDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/*-------- NTP code ----------*/
|
||||
|
||||
unsigned long getNtpTime()
|
||||
{
|
||||
sendNTPpacket(SNTP_server_IP);
|
||||
delay(1000);
|
||||
if ( UdpBytewise.available() ) {
|
||||
for(int i=0; i < 40; i++)
|
||||
UdpBytewise.read(); // ignore every field except the time
|
||||
const unsigned long seventy_years = 2208988800UL + timeZoneOffset;
|
||||
return getUlong() - seventy_years;
|
||||
}
|
||||
return 0; // return 0 if unable to get the time
|
||||
}
|
||||
|
||||
unsigned long sendNTPpacket(byte *address)
|
||||
{
|
||||
UdpBytewise.begin(123);
|
||||
UdpBytewise.beginPacket(address, 123);
|
||||
UdpBytewise.write(B11100011); // LI, Version, Mode
|
||||
UdpBytewise.write(0); // Stratum
|
||||
UdpBytewise.write(6); // Polling Interval
|
||||
UdpBytewise.write(0xEC); // Peer Clock Precision
|
||||
write_n(0, 8); // Root Delay & Root Dispersion
|
||||
UdpBytewise.write(49);
|
||||
UdpBytewise.write(0x4E);
|
||||
UdpBytewise.write(49);
|
||||
UdpBytewise.write(52);
|
||||
write_n(0, 32); //Reference and time stamps
|
||||
UdpBytewise.endPacket();
|
||||
}
|
||||
|
||||
unsigned long getUlong()
|
||||
{
|
||||
unsigned long ulong = (unsigned long)UdpBytewise.read() << 24;
|
||||
ulong |= (unsigned long)UdpBytewise.read() << 16;
|
||||
ulong |= (unsigned long)UdpBytewise.read() << 8;
|
||||
ulong |= (unsigned long)UdpBytewise.read();
|
||||
return ulong;
|
||||
}
|
||||
|
||||
void write_n(int what, int how_many)
|
||||
{
|
||||
for( int i = 0; i < how_many; i++ )
|
||||
UdpBytewise.write(what);
|
||||
}
|
||||
47
Projects/libraries/Installed_libs/Time/Examples/TimeRTC/TimeRTC.pde
Executable file
47
Projects/libraries/Installed_libs/Time/Examples/TimeRTC/TimeRTC.pde
Executable file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* TimeRTC.pde
|
||||
* example code illustrating Time library with Real Time Clock.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Time.h>
|
||||
#include <Wire.h>
|
||||
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
setSyncProvider(RTC.get); // the function to get the time from the RTC
|
||||
if(timeStatus()!= timeSet)
|
||||
Serial.println("Unable to sync with the RTC");
|
||||
else
|
||||
Serial.println("RTC has set the system time");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
106
Projects/libraries/Installed_libs/Time/Examples/TimeRTCLog/TimeRTCLog.pde
Executable file
106
Projects/libraries/Installed_libs/Time/Examples/TimeRTCLog/TimeRTCLog.pde
Executable file
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* TimeRTCLogger.pde
|
||||
* example code illustrating adding and subtracting Time.
|
||||
*
|
||||
* this sketch logs pin state change events
|
||||
* the time of the event and time since the previous event is calculated and sent to the serial port.
|
||||
*/
|
||||
|
||||
#include <Time.h>
|
||||
#include <Wire.h>
|
||||
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
|
||||
|
||||
const int nbrInputPins = 6; // monitor 6 digital pins
|
||||
const int inputPins[nbrInputPins] = {2,3,4,5,6,7}; // pins to monitor
|
||||
boolean state[nbrInputPins] ; // the state of the monitored pins
|
||||
time_t prevEventTime[nbrInputPins] ; // the time of the previous event
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
setSyncProvider(RTC.get); // the function to sync the time from the RTC
|
||||
for(int i=0; i < nbrInputPins; i++){
|
||||
pinMode( inputPins[i], INPUT);
|
||||
// digitalWrite( inputPins[i], HIGH); // uncomment these lines if
|
||||
// state[i] = HIGH; // pull-up resistors are wanted
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
for(int i=0; i < nbrInputPins; i++)
|
||||
{
|
||||
boolean val = digitalRead(inputPins[i]);
|
||||
if(val != state[i])
|
||||
{
|
||||
time_t duration = 0; // the time since the previous event
|
||||
state[i] = val;
|
||||
time_t timeNow = now();
|
||||
if(prevEventTime[i] > 0)
|
||||
// if this was not the first state change, calculate the time from the previous change
|
||||
duration = duration = timeNow - prevEventTime[i];
|
||||
logEvent(inputPins[i], val, timeNow, duration ); // log the event
|
||||
prevEventTime[i] = timeNow; // store the time for this event
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void logEvent( int pin, boolean state, time_t timeNow, time_t duration)
|
||||
{
|
||||
Serial.print("Pin ");
|
||||
Serial.print(pin);
|
||||
if( state == HIGH)
|
||||
Serial.print(" went High at ");
|
||||
else
|
||||
Serial.print(" went Low at ");
|
||||
showTime(timeNow);
|
||||
if(duration > 0){
|
||||
// only display duration if greater than 0
|
||||
Serial.print(", Duration was ");
|
||||
showDuration(duration);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
|
||||
void showTime(time_t t){
|
||||
// display the given time
|
||||
Serial.print(hour(t));
|
||||
printDigits(minute(t));
|
||||
printDigits(second(t));
|
||||
Serial.print(" ");
|
||||
Serial.print(day(t));
|
||||
Serial.print(" ");
|
||||
Serial.print(month(t));
|
||||
Serial.print(" ");
|
||||
Serial.print(year(t));
|
||||
}
|
||||
|
||||
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 showDuration(time_t duration){
|
||||
// prints the duration in days, hours, minutes and seconds
|
||||
if(duration >= SECS_PER_DAY){
|
||||
Serial.print(duration / SECS_PER_DAY);
|
||||
Serial.print(" day(s) ");
|
||||
duration = duration % SECS_PER_DAY;
|
||||
}
|
||||
if(duration >= SECS_PER_HOUR){
|
||||
Serial.print(duration / SECS_PER_HOUR);
|
||||
Serial.print(" hour(s) ");
|
||||
duration = duration % SECS_PER_HOUR;
|
||||
}
|
||||
if(duration >= SECS_PER_MIN){
|
||||
Serial.print(duration / SECS_PER_MIN);
|
||||
Serial.print(" minute(s) ");
|
||||
duration = duration % SECS_PER_MIN;
|
||||
}
|
||||
Serial.print(duration);
|
||||
Serial.print(" second(s) ");
|
||||
}
|
||||
|
||||
82
Projects/libraries/Installed_libs/Time/Examples/TimeRTCSet/TimeRTCSet.pde
Executable file
82
Projects/libraries/Installed_libs/Time/Examples/TimeRTCSet/TimeRTCSet.pde
Executable file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* TimeRTCSet.pde
|
||||
* example code illustrating Time library with Real Time Clock.
|
||||
*
|
||||
* RTC clock is set in response to serial port time message
|
||||
* A Processing example sketch to set the time is inclided in the download
|
||||
*/
|
||||
|
||||
#include <Time.h>
|
||||
#include <Wire.h>
|
||||
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
|
||||
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
setSyncProvider(RTC.get); // the function to get the time from the RTC
|
||||
if(timeStatus()!= timeSet)
|
||||
Serial.println("Unable to sync with the RTC");
|
||||
else
|
||||
Serial.println("RTC has set the system time");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
if(Serial.available())
|
||||
{
|
||||
time_t t = processSyncMessage();
|
||||
if(t >0)
|
||||
{
|
||||
RTC.set(t); // set the RTC and the system time to the received value
|
||||
setTime(t);
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
/* code to process time sync messages from the serial port */
|
||||
#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
|
||||
|
||||
time_t processSyncMessage() {
|
||||
// return the time if a valid sync message is received on the serial port.
|
||||
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
|
||||
}
|
||||
}
|
||||
return pctime;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
82
Projects/libraries/Installed_libs/Time/Examples/TimeSerial/TimeSerial.pde
Executable file
82
Projects/libraries/Installed_libs/Time/Examples/TimeSerial/TimeSerial.pde
Executable file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* 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
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* TimeSerialDateStrings.pde
|
||||
* example code illustrating Time library date strings
|
||||
*
|
||||
* This sketch adds date string functionality to TimeSerial.pde
|
||||
*
|
||||
*/
|
||||
|
||||
#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)
|
||||
{
|
||||
digitalClockDisplay();
|
||||
}
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void digitalClockDisplay(){
|
||||
// digital clock display of the time
|
||||
Serial.print(hour());
|
||||
printDigits(minute());
|
||||
printDigits(second());
|
||||
Serial.print(" ");
|
||||
Serial.print(dayStr(weekday()));
|
||||
Serial.print(" ");
|
||||
Serial.print(day());
|
||||
Serial.print(" ");
|
||||
Serial.print(monthShortStr(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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user