Files
LoLshield/extras/base12clock/base12clock.pde
T
jprodgers e5141bfbea Migration and reorganization post google code.
I've re-arranged and re-named a number of things in the move over from
google code. I've added a few animations and things as well.
2015-05-28 14:45:21 +02:00

111 lines
3.2 KiB
Plaintext

/*
Base 12 Clock
Writen for the LoL Shield, designed by Jimmie Rodgers:
http://jimmieprodgers.com/kits/lolshield/
This needs the Charliplexing library, which you can get at the
LoL Shield project page: http://code.google.com/p/lolshield/
This also uses the Adafruit DS1307 breakout, which you will also
need the library for:
http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html
Created by Jimmie Rodgers on 2/2/2011.
This is free software; you can redistribute it and/or
modify it under the terms of the GNU Version 3 General Public
License as published by the Free Software Foundation;
or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
//These libraries need to be included for both the LoL Shield
//and DS1307 breakout.
#include "Charliplexing.h"
#include "WProgram.h"
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
LedSign::Init(); //initializes the LoL Shield frame buffer
pinMode(16, OUTPUT); //16 and 17 power the DS1307
pinMode(17, OUTPUT);
digitalWrite(16, LOW); //ground for the DS1307
digitalWrite(17, HIGH);//provides 5v for the DS1307
Wire.begin(); //starts the I2C serial on pins 18&19
RTC.begin(); //starts communication with the DS1307
}
void loop(){
DateTime now = RTC.now(); //creates a DateTime object
//I set the time all at once so that it doesn't cause
//strange timing issues
int hour = now.hour();
int minute = now.minute();
int second = now.second();
//These are used to easily parse the seconds
int fiveCount = second / 5;
int tenCount = second % 10;
//It only needs to clear on counts of 10, as that
//is the only time the display really changes.
if (tenCount == 0 )LedSign::Clear();
//These loops set the seconds on the LoL Shield.
for (int i=0; i < tenCount+1; i++){
if (i < 5)LedSign::Set(i+1, 8, 1);
else LedSign::Set(i+3, 8, 1);
}
for (int i=0; i < fiveCount+1;i++){
LedSign::Set(i+1, 7, 1);
}
//This loop sets the hour.
for (int x=0; x < hour; x++){
if(x < 12){
if (x < 6)LedSign::Set(x, 0, 1);
else LedSign::Set(x+1, 0, 1);
}
else{
if (x < 18)LedSign::Set(x-12, 1, 1);
else LedSign::Set(x-11, 1, 1);
}
}
//This loop sets the minutes
for (int x=0; x < minute; x++){
if(x < 12){
if (x < 6)LedSign::Set(x+1, 2, 1);
else LedSign::Set(x+2, 2, 1);
}
else if (x < 24){
if (x < 18)LedSign::Set(x-11, 3, 1);
else LedSign::Set(x-10, 3, 1);
}
else if (x < 36){
if (x < 30)LedSign::Set(x-23, 4, 1);
else LedSign::Set(x-22, 4, 1);
}
else if (x < 48){
if (x < 42)LedSign::Set(x-35, 5, 1);
else LedSign::Set(x-34, 5, 1);
}
else if (x < 60){
if (x < 54)LedSign::Set(x-47, 6, 1);
else LedSign::Set(x-46, 6, 1);
}
}
delay(500);//no reason to update much more than this
}