This repository has been archived by the owner on Nov 18, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changes to build using VSCode/PlatformIO
- Loading branch information
Showing
23 changed files
with
1,865 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
/.pio | ||
/.vscode | ||
/Pictures | ||
/Renders | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
|
||
This directory is intended for project specific (private) libraries. | ||
PlatformIO will compile them to static libraries and link into executable file. | ||
|
||
The source code of each library should be placed in a an own separate directory | ||
("lib/your_library_name/[here are source files]"). | ||
|
||
For example, see a structure of the following two libraries `Foo` and `Bar`: | ||
|
||
|--lib | ||
| | | ||
| |--Bar | ||
| | |--docs | ||
| | |--examples | ||
| | |--src | ||
| | |- Bar.c | ||
| | |- Bar.h | ||
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | ||
| | | ||
| |--Foo | ||
| | |- Foo.c | ||
| | |- Foo.h | ||
| | | ||
| |- README --> THIS FILE | ||
| | ||
|- platformio.ini | ||
|--src | ||
|- main.c | ||
|
||
and a contents of `src/main.c`: | ||
``` | ||
#include <Foo.h> | ||
#include <Bar.h> | ||
|
||
int main (void) | ||
{ | ||
... | ||
} | ||
|
||
``` | ||
|
||
PlatformIO Library Dependency Finder will find automatically dependent | ||
libraries scanning project source files. | ||
|
||
More information about PlatformIO Library Dependency Finder | ||
- https://docs.platformio.org/page/librarymanager/ldf.html |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
/* DateStrings.cpp | ||
* Definitions for date strings for use with the Time library | ||
* | ||
* Updated for Arduino 1.5.7 18 July 2014 | ||
* | ||
* No memory is consumed in the sketch if your code does not call any of the string methods | ||
* You can change the text of the strings, make sure the short strings are each exactly 3 characters | ||
* the long strings can be any length up to the constant dt_MAX_STRING_LEN defined in Time.h | ||
* | ||
*/ | ||
|
||
#if defined(__AVR__) | ||
#include <avr/pgmspace.h> | ||
#else | ||
// for compatiblity with Arduino Due and Teensy 3.0 and maybe others? | ||
#define PROGMEM | ||
#define PGM_P const char * | ||
#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) | ||
#define pgm_read_word(addr) (*(const unsigned char **)(addr)) | ||
#define strcpy_P(dest, src) strcpy((dest), (src)) | ||
#endif | ||
#include <string.h> // for strcpy_P or strcpy | ||
#include "Time.h" | ||
|
||
// the short strings for each day or month must be exactly dt_SHORT_STR_LEN | ||
#define dt_SHORT_STR_LEN 3 // the length of short strings | ||
|
||
static char buffer[dt_MAX_STRING_LEN+1]; // must be big enough for longest string and the terminating null | ||
|
||
const char monthStr0[] PROGMEM = ""; | ||
const char monthStr1[] PROGMEM = "January"; | ||
const char monthStr2[] PROGMEM = "February"; | ||
const char monthStr3[] PROGMEM = "March"; | ||
const char monthStr4[] PROGMEM = "April"; | ||
const char monthStr5[] PROGMEM = "May"; | ||
const char monthStr6[] PROGMEM = "June"; | ||
const char monthStr7[] PROGMEM = "July"; | ||
const char monthStr8[] PROGMEM = "August"; | ||
const char monthStr9[] PROGMEM = "September"; | ||
const char monthStr10[] PROGMEM = "October"; | ||
const char monthStr11[] PROGMEM = "November"; | ||
const char monthStr12[] PROGMEM = "December"; | ||
|
||
const PROGMEM char * const PROGMEM monthNames_P[] = | ||
{ | ||
monthStr0,monthStr1,monthStr2,monthStr3,monthStr4,monthStr5,monthStr6, | ||
monthStr7,monthStr8,monthStr9,monthStr10,monthStr11,monthStr12 | ||
}; | ||
|
||
const char monthShortNames_P[] PROGMEM = "ErrJanFebMarAprMayJunJulAugSepOctNovDec"; | ||
|
||
const char dayStr0[] PROGMEM = "Err"; | ||
const char dayStr1[] PROGMEM = "Sunday"; | ||
const char dayStr2[] PROGMEM = "Monday"; | ||
const char dayStr3[] PROGMEM = "Tuesday"; | ||
const char dayStr4[] PROGMEM = "Wednesday"; | ||
const char dayStr5[] PROGMEM = "Thursday"; | ||
const char dayStr6[] PROGMEM = "Friday"; | ||
const char dayStr7[] PROGMEM = "Saturday"; | ||
|
||
const PROGMEM char * const PROGMEM dayNames_P[] = | ||
{ | ||
dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7 | ||
}; | ||
|
||
const char dayShortNames_P[] PROGMEM = "ErrSunMonTueWedThuFriSat"; | ||
|
||
/* functions to return date strings */ | ||
|
||
char* monthStr(uint8_t month) | ||
{ | ||
strcpy_P(buffer, (PGM_P)pgm_read_word(&(monthNames_P[month]))); | ||
return buffer; | ||
} | ||
|
||
char* monthShortStr(uint8_t month) | ||
{ | ||
for (int i=0; i < dt_SHORT_STR_LEN; i++) | ||
buffer[i] = pgm_read_byte(&(monthShortNames_P[i+ (month*dt_SHORT_STR_LEN)])); | ||
buffer[dt_SHORT_STR_LEN] = 0; | ||
return buffer; | ||
} | ||
|
||
char* dayStr(uint8_t day) | ||
{ | ||
strcpy_P(buffer, (PGM_P)pgm_read_word(&(dayNames_P[day]))); | ||
return buffer; | ||
} | ||
|
||
char* dayShortStr(uint8_t day) | ||
{ | ||
uint8_t index = day*dt_SHORT_STR_LEN; | ||
for (int i=0; i < dt_SHORT_STR_LEN; i++) | ||
buffer[i] = pgm_read_byte(&(dayShortNames_P[index + i])); | ||
buffer[dt_SHORT_STR_LEN] = 0; | ||
return buffer; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
Readme file for Arduino Time Library | ||
|
||
Time is a library that provides timekeeping functionality for Arduino. | ||
|
||
The code is derived from the Playground DateTime library but is updated | ||
to provide an API that is more flexable and easier to use. | ||
|
||
A primary goal was to enable date and time functionality that can be used with | ||
a variety of external time sources with minimum differences required in sketch logic. | ||
|
||
Example sketches illustrate how similar sketch code can be used with: a Real Time Clock, | ||
internet NTP time service, GPS time data, and Serial time messages from a computer | ||
for time synchronization. | ||
|
||
The functions available in the library include: | ||
|
||
hour(); // the hour now (0-23) | ||
minute(); // the minute now (0-59) | ||
second(); // the second now (0-59) | ||
day(); // the day now (1-31) | ||
weekday(); // day of the week, Sunday is day 0 | ||
month(); // the month now (1-12) | ||
year(); // the full four digit year: (2009, 2010 etc) | ||
|
||
there are also functions to return the hour in 12 hour format | ||
hourFormat12(); // the hour now in 12 hour format | ||
isAM(); // returns true if time now is AM | ||
isPM(); // returns true if time now is PM | ||
|
||
now(); // returns the current time as seconds since Jan 1 1970 | ||
|
||
The time and date functions can take an optional parameter for the time. This prevents | ||
errors if the time rolls over between elements. For example, if a new minute begins | ||
between getting the minute and second, the values will be inconsistent. Using the | ||
following functions eliminates this probglem | ||
time_t t = now(); // store the current time in time variable t | ||
hour(t); // returns the hour for the given time t | ||
minute(t); // returns the minute for the given time t | ||
second(t); // returns the second for the given time t | ||
day(t); // the day for the given time t | ||
weekday(t); // day of the week for the given time t | ||
month(t); // the month for the given time t | ||
year(t); // the year for the given time t | ||
|
||
|
||
Functions for managing the timer services are: | ||
setTime(t); // set the system time to the give time t | ||
setTime(hr,min,sec,day,mnth,yr); // alternative to above, yr is 2 or 4 digit yr (2010 or 10 sets year to 2010) | ||
adjustTime(adjustment); // adjust system time by adding the adjustment value | ||
|
||
timeStatus(); // indicates if time has been set and recently synchronized | ||
// returns one of the following enumerations: | ||
timeNotSet // the time has never been set, the clock started at Jan 1 1970 | ||
timeNeedsSync // the time had been set but a sync attempt did not succeed | ||
timeSet // the time is set and is synced | ||
Time and Date values are not valid if the status is timeNotSet. Otherwise values can be used but | ||
the returned time may have drifted if the status is timeNeedsSync. | ||
|
||
setSyncProvider(getTimeFunction); // set the external time provider | ||
setSyncInterval(interval); // set the number of seconds between re-sync | ||
|
||
|
||
There are many convenience macros in the time.h file for time constants and conversion of time units. | ||
|
||
To use the library, copy the download to the Library directory. | ||
|
||
The Time directory contains the Time library and some example sketches | ||
illustrating how the library can be used with various time sources: | ||
|
||
- TimeSerial.pde shows Arduino as a clock without external hardware. | ||
It is synchronized by time messages sent over the serial port. | ||
A companion Processing sketch will automatically provide these messages | ||
if it is running and connected to the Arduino serial port. | ||
|
||
- TimeSerialDateStrings.pde adds day and month name strings to the sketch above | ||
Short (3 character) and long strings are available to print the days of | ||
the week and names of the months. | ||
|
||
- TimeRTC uses a DS1307 real time clock to provide time synchronization. | ||
A basic RTC library named DS1307RTC is included in the download. | ||
To run this sketch the DS1307RTC library must be installed. | ||
|
||
- TimeRTCSet is similar to the above and adds the ability to set the Real Time Clock | ||
|
||
- TimeRTCLog demonstrates how to calculate the difference between times. | ||
It is a vary simple logger application that monitors events on digtial pins | ||
and prints (to the serial port) the time of an event and the time period since the previous event. | ||
|
||
- TimeNTP uses the Arduino Ethernet shield to access time using the internet NTP time service. | ||
The NTP protocol uses UDP and the UdpBytewise library is required, see: | ||
http://bitbucket.org/bjoern/arduino_osc/src/14667490521f/libraries/Ethernet/ | ||
|
||
- TimeGPS gets time from a GPS | ||
This requires the TinyGPS library from Mikal Hart: | ||
http://arduiniana.org/libraries/TinyGPS | ||
|
||
Differences between this code and the playground DateTime library | ||
although the Time library is based on the DateTime codebase, the API has changed. | ||
Changes in the Time library API: | ||
- time elements are functions returning int (they are variables in DateTime) | ||
- Years start from 1970 | ||
- days of the week and months start from 1 (they start from 0 in DateTime) | ||
- DateStrings do not require a seperate library | ||
- time elements can be accessed non-atomically (in DateTime they are always atomic) | ||
- function added to automatically sync time with extrnal source | ||
- localTime and maketime parameters changed, localTime renamed to breakTime | ||
|
||
Technical notes: | ||
|
||
Internal system time is based on the standard Unix time_t. | ||
The value is the number of seconds since Jan 1 1970. | ||
System time begins at zero when the sketch starts. | ||
|
||
The internal time can be automatically synchronized at regular intervals to an external time source. | ||
This is enabled by calling the setSyncProvider(provider) function - the provider argument is | ||
the address of a function that returns the current time as a time_t. | ||
See the sketches in the examples directory for usage. | ||
|
||
The default interval for re-syncing the time is 5 minutes but can be changed by calling the | ||
setSyncInterval( interval) method to set the number of seconds between re-sync attempts. | ||
|
||
The Time library defines a structure for holding time elements that is a compact version of the C tm structure. | ||
All the members of the Arduino tm structure are bytes and the year is offset from 1970. | ||
Convenience macros provide conversion to and from the Arduino format. | ||
|
||
Low level functions to convert between system time and individual time elements are provided: | ||
breakTime( time, &tm); // break time_t into elements stored in tm struct | ||
makeTime( &tm); // return time_t from elements stored in tm struct | ||
|
||
The DS1307RTC library included in the download provides an example of how a time provider | ||
can use the low level functions to interface with the Time library. |
Oops, something went wrong.