This is an example of how to program the O Watch. Please visit http://theowatch.com/about to learn about the O Watch story.
O Watch Programming: Basic WatchLet us start with a basic watch program.
We will use the Arduino Time Library to make the watch program.
When we adapt a standard Arduino program for O Watch, you need to keep in mind two things: a) Include and Initialize the TinyScreen library and b) All output will be via the TinyScreen display.
Simple Watch Program 1
/*
* Simple Watch
*
* Demonstrates the use of the Arduino Time library to make a simple digital watch
*
* Uses Arduino Time library http://playground.arduino.cc/code/time
* Maintained by Paul Stoffregen https://github.com/PaulStoffregen/Time
*
* This code is for the TinyScreen+ board by TinyCircuits used by O Watch http://tiny-circuits.com
*
* This example is created by O Watch on 6 March 2016 http://theowatch.com
*
*/
#include //include TinyScreen library
#include //include the Arduino Time library
#include //include this library for communication with OLED screen
TinyScreen display = TinyScreen(TinyScreenPlus); //Create the TinyScreen object
void setup()
{
display.begin(); //Initializes TinyScreen board
display.setFlip(1); //Flips the TinyScreen rightside up for O Watch
display.on(); //Turns TinyScreen display on
display.fontColor(TS_8b_White,TS_8b_Black); //Set the font color, font background
display.setBrightness(10); //Set display brightness 0 - 15
// Set the time and date. Change this to your current date and time.
setTime(13,19,55,6,3,2016); //values in the order hr,min,sec,day,month,year
}
void loop()
{
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
// Print date in US format MM:DD:YY (Switch the order in which day, month, year that you like to use)
display.setCursor(15,8); //Set the cursor where you want to start printing the date
display.print(monthShortStr(month()));
display.print(" ");
display.print(day());
display.print(", ");
display.print(year());
display.setCursor(30,25); //Set the cursor where you want to start printing the date
display.print(dayStr(weekday()));
display.setFont(liberationSansNarrow_16ptFontInfo); //Set the font type
// display time in HH:MM:SS 24 hour format
display.setCursor(20,45); //Set the cursor where you want to start printing the time
if(hour()
display.print(hour());
display.print(":");
if(minute()
display.print(minute());
display.print(":");
if(second()
display.print(second());
display.print(" "); //just a empty space after the seconds
delay(1000); //delay 1 second
}
You can copy and paste the above program in to your Arduino IDE and upload it to O Watch.
The following are the main functions used here from the Arduino Time library.
- setTime(hr,min,sec,day,mnth,yr): Sets the time
- 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)
- monthStr(month()): Gives the month as text string for the retrieved month() value
- dayStr(day()): Gives the month as text string for the retrieved day() value
Simple Watch 2
Now let us take it a step forward and write a watch with functions to update the time and date. In this we will also see how to use the buttons to select the part of the program (or function) you want to run. We will also see how to use the Arduino for and switch/case statements.
/*
* Simple Watch 2
*
* Demonstrates the use of the Arduino Time library to make a simple digital watch
* In this we write functions to set time and date and learn how to use the buttons
* Also learn Arduino 'switch' and 'for' statements/commands
*
* Uses Arduino Time library http://playground.arduino.cc/code/time
* Maintained by Paul Stoffregen https://github.com/PaulStoffregen/Time
*
* This code is for the TinyScreen+ board by TinyCircuits used by O Watch http://tiny-circuits.com
*
* This example is created by O Watch on 6 March 2016 http://theowatch.com
*
*/
#include //include TinyScreen library
#include //include the Arduino Time library
TinyScreen display = TinyScreen(TinyScreenPlus); //Create the TinyScreen object
void setup()
{
display.begin(); //Initializes TinyScreen board
display.setFlip(1); //Flips the TinyScreen rightside up for O Watch
display.on(); //Turns TinyScreen display on
display.fontColor(TS_8b_White,TS_8b_Black); //Set the font color, font background
display.setBrightness(10); //Set display brightness 0 - 15
// Set the time and date. Change this to your current date and time.
setTime(13,19,55,6,3,2016); //values in the order hr,min,sec,day,month,year
//Show info at start to say what each button does
display.setFont(liberationSansNarrow_14ptFontInfo);
display.setCursor(35,30);
display.print("Set");
display.setFont(liberationSansNarrow_10ptFontInfo);
display.setCursor(5,7);
display.print("Shows Time 10s>");
display.setCursor(60,45);
display.print("Date>");
display.setCursor(5,45);
display.print("
delay(8000);
display.clearScreen();
}
void loop()
{
//Switch statement to select part of code to run based on button selection
switch (display.getButtons())
{
//Run updateTime function
case TSButtonLowerLeft:
display.on();
updateTime();
delay(200);
display.off();
break;
//Run updateDate function
case TSButtonLowerRight:
delay(200);
display.on();
updateDate();
delay(200);
display.off();
break;
//Show time for 10 seconds
case TSButtonUpperRight:
display.on();
for(int i=0; i
{
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
// Print date in US format MM:DD:YY (Switch the order in which day, month, year that you like to use)
display.setCursor(15,8); //Set the cursor where you want to start printing the date
display.print(monthShortStr(month()));
display.print(" ");
display.print(day());
display.print(", ");
display.print(year());
display.setCursor(30,25); //Set the cursor where you want to start printing the date
display.print(dayStr(weekday()));
display.setFont(liberationSansNarrow_16ptFontInfo); //Set the font type
// display time in HH:MM:SS 24 hour format
display.setCursor(20,45); //Set the cursor where you want to start printing the time
if(hour()
display.print(hour());
display.print(":");
if(minute()
display.print(minute());
display.print(":");
if(second()
display.print(second());
display.print(" "); //just a empty space after the seconds
delay(1000); //delay 1 second
}
delay(200);
display.clearScreen();
display.off();
break;
}
delay(200);
}
//Function to update time
void updateTime()
{
//Set hour
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(15,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Hour:");
int myhour=hour();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(75,40);
if(myhour
display.print(myhour);
if(display.getButtons(TSButtonUpperRight))
myhour++;
if(display.getButtons(TSButtonLowerRight))
myhour--;
if(myhour
if(myhour>24) myhour=0;
delay(200);
}
setTime(myhour, minute(), second(), day(), month(), year());
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Hour Saved");
delay(1000);
//Set minute
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(15,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Mins:");
int myminute=minute();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(75,40);
if(myminute
display.print(myminute);
if(display.getButtons(TSButtonUpperRight))
myminute++;
if(display.getButtons(TSButtonLowerRight))
myminute--;
if(myminute
if(myminute>60) myminute=0;
delay(200);
}
setTime(hour(), myminute, second(), day(), month(), year());
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Minute Saved");
delay(1000);
//Set second
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(15,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Secs:");
int mysecond=second();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(75,40);
if(mysecond
display.print(mysecond);
if(display.getButtons(TSButtonUpperRight))
mysecond++;
if(display.getButtons(TSButtonLowerRight))
mysecond--;
if(mysecond
if(mysecond>60) mysecond=0;
delay(200);
}
setTime(hour(), minute(), mysecond, day(), month(), year());
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Second Saved");
delay(1000);
display.clearScreen();
}
//Function to update time
void updateDate()
{
//Set day
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(10,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Day:");
int myday=day();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(75,40);
if(myday
display.print(myday);
if(display.getButtons(TSButtonUpperRight))
myday++;
if(display.getButtons(TSButtonLowerRight))
myday--;
if(myday
if(myday>31) myday=0;
delay(200);
}
setTime(hour(), minute(), second(), myday, month(), year());
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Day Saved");
delay(1000);
//Set month
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(10,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Month:");
int mymonth=month();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(75,40);
if(mymonth
display.print(mymonth);
if(display.getButtons(TSButtonUpperRight))
mymonth++;
if(display.getButtons(TSButtonLowerRight))
mymonth--;
if(mymonth
if(mymonth>60) mymonth=0;
delay(200);
}
setTime(hour(), minute(), second(), day(), mymonth, year());
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Month Saved");
delay(1000);
//Set Year
display.clearScreen();
display.setFont(liberationSansNarrow_8ptFontInfo); //Set the font type
display.setCursor(2,15);
display.print("");
display.setCursor(10,40);
display.setFont(liberationSansNarrow_12ptFontInfo); //Set the font type
display.print("Set Year:");
int myyear=year();
while(!display.getButtons(TSButtonUpperLeft))
{
display.setCursor(68,40);
if(myyear
display.print(myyear);
if(display.getButtons(TSButtonUpperRight))
myyear++;
if(display.getButtons(TSButtonLowerRight))
myyear--;
if(myyear
if(myyear>2030) myyear=2010;
delay(200);
}
setTime(hour(), minute(), second(), day(), month(), myyear);
delay(500);
display.clearScreen();
display.setCursor(10,25);
display.print("Year Saved");
delay(1000);
display.clearScreen();
}
Note the following from this second program:
- User Defined Functions: You see two functions updateTime() and updateDate() that are written by the user and called from the main loop.
- Switch/Case: The use of Arduino Switch/Case statements to select the code block/function you want to run.
- For: Arduino for statements to create a loop for a specific number of runs.
- display.on() and off(): We use these TinyScreen functions to switch off the display when not needed to conserve power.
There you have your basic digital watch that can last most of the day. Hope this gives you enough of an idea to make your own versions of the watch.
Now that you've completed this basic watch program, have a look at the other O Watch projects from the community https://www.hackster.io/o-watch.
Comments