389 lines
11 KiB
C
389 lines
11 KiB
C
/**************************************************************************
|
|
* *
|
|
* W O R D C L O C K - A clock that tells the time using words. *
|
|
* *
|
|
* DUTCH Language Support Functions *
|
|
* *
|
|
* Copyright (C) 2009,2010,2011 Doug Jackson (doug@doughq.com) *
|
|
* *
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program 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 General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the Free Software *
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
|
|
* MA 02111-1307 USA *
|
|
* *
|
|
***************************************************************************
|
|
*
|
|
* Revision History
|
|
* 20110315 DRJ Split off from Wordclock.pde to simplify modifying
|
|
* code for multiple languages
|
|
*/
|
|
|
|
|
|
|
|
// Display output pin assignments
|
|
#define MTEN Display1=Display1 | (1<<1); //Serial.print("tien ");
|
|
#define HALF Display1=Display1 | (1<<2); //Serial.print("half ");
|
|
#define PAST Display1=Display1 | (1<<3); //Serial.print("over ");
|
|
#define THREE Display1=Display1 | (1<<4); //Serial.print("drie ");
|
|
#define ITIS Display1=Display1 | (1<<5); //Serial.print("het is ")
|
|
#define TO Display1=Display1 | (1<<7); //Serial.print("voor ");
|
|
|
|
#define TWO Display2=Display2 | (1<<0); //Serial.print("twee ");
|
|
#define SIX Display2=Display2 | (1<<1); //Serial.print("zes ");
|
|
#define TWELVE Display2=Display2 | (1<<2); //Serial.print("twaalf ");
|
|
#define HFIVE Display2=Display2 | (1<<3); //Serial.print("vijf ");
|
|
#define SEVEN Display2=Display2 | (1<<4); //Serial.print("zeven ");
|
|
#define HOUR Display2=Display2 | (1<<5); //Serial.print("uur ");
|
|
#define ONE Display2=Display2 | (1<<6); //Serial.print("een ");
|
|
#define QUARTER Display2=Display2 | (1<<7); //Serial.print("kwart ");
|
|
|
|
#define EIGHT Display3=Display3 | (1<<0); //Serial.print("acht ");
|
|
#define MFIVE Display3=Display3 | (1<<1); //Serial.print("vijf ");
|
|
#define ELEVEN Display3=Display3 | (1<<3); //Serial.print("elf ");
|
|
#define HTEN Display3=Display3 | (1<<4); //Serial.print("tien ");
|
|
#define NINE Display3=Display3 | (1<<5); //Serial.print("negen ");
|
|
#define FOUR Display3=Display3 | (1<<6); //Serial.print("vier ");
|
|
|
|
#define LED1 Led1=1; //Serial.print("MINLED 1 ")
|
|
#define LED2 Led2=1; //Serial.print("2 ")
|
|
#define LED3 Led3=1; //Serial.print("3 ")
|
|
#define LED4 Led4=1; //Serial.print("4 ")
|
|
|
|
/*#define LED1 digitalWrite(LED1PIN,HIGH)
|
|
#define LED2 digitalWrite(LED2PIN,HIGH)
|
|
#define LED3 digitalWrite(LED3PIN,HIGH)
|
|
#define LED4 digitalWrite(LED4PIN,HIGH)*/
|
|
|
|
|
|
|
|
|
|
void selftest(void){
|
|
Serial.print("Selftest started");
|
|
// start by clearing the display to a known state
|
|
ledsoff(); ITIS; delay(500);
|
|
ledsoff(); MFIVE; delay(500);
|
|
ledsoff(); MTEN; delay(500);
|
|
ledsoff(); QUARTER; delay(500);
|
|
ledsoff(); PAST; delay(500);
|
|
ledsoff(); TO; delay(500);
|
|
ledsoff(); HALF; delay(500);
|
|
ledsoff(); ONE; delay(500);
|
|
ledsoff(); TWO; delay(500);
|
|
ledsoff(); THREE; delay(500);
|
|
ledsoff(); FOUR; delay(500);
|
|
ledsoff(); HFIVE; delay(500);
|
|
ledsoff(); SIX; delay(500);
|
|
ledsoff(); SEVEN; delay(500);
|
|
ledsoff(); EIGHT; delay(500);
|
|
ledsoff(); NINE; delay(500);
|
|
ledsoff(); HTEN; delay(500);
|
|
ledsoff(); ELEVEN; ; delay(500);
|
|
ledsoff(); TWELVE; delay(500);
|
|
ledsoff(); HOUR; delay(500);
|
|
ledsoff(); LED1; delay(500);
|
|
ledsoff(); LED2; delay(500);
|
|
ledsoff(); LED3; delay(500);
|
|
ledsoff(); LED4; delay(500);
|
|
Serial.println(" .. ok");
|
|
|
|
for(int i=0; i<5; i++)
|
|
{
|
|
Display1=255; Display2=255; Display3=255; LED1; LED2; LED3; LED4; delay(500);
|
|
ledsoff(); delay(500);
|
|
}
|
|
|
|
}
|
|
|
|
void displaytime_round(void)
|
|
{
|
|
int n;
|
|
|
|
// compute the number of seconds that we are in the hour
|
|
n = 60 * minute + second;
|
|
|
|
// start by clearing the display to a known state
|
|
ledsoff();
|
|
|
|
// Now, turn on the "It is" leds
|
|
ITIS;
|
|
|
|
|
|
// now we display the appropriate minute counter
|
|
if ((n >= 2 * 60 + 30) && (n < 7 * 60 + 30)) { MFIVE; PAST; }
|
|
if ((n >= 7 * 60 + 30) && (n < 12 * 60 + 30)) { MTEN; PAST; }
|
|
if ((n >= 12 * 60 + 30) && (n < 17 * 60 + 30)) { QUARTER; PAST; }
|
|
if ((n >= 17 * 60 + 30) && (n < 22 * 60 + 30)) { MTEN; TO; HALF; }
|
|
if ((n >= 22 * 60 + 30) && (n < 27 * 60 + 30)) { MFIVE; TO; HALF; }
|
|
if ((n >= 27 * 60 + 30) && (n < 32 * 60 + 30)) { HALF; }
|
|
if ((n >= 32 * 60 + 30) && (n < 37 * 60 + 30)) { MFIVE; PAST; HALF; }
|
|
if ((n >= 37 * 60 + 30) && (n < 42 * 60 + 30)) { MTEN; PAST; HALF; }
|
|
if ((n >= 42 * 60 + 30) && (n < 47 * 60 + 30)) { QUARTER; TO; }
|
|
if ((n >= 47 * 60 + 30) && (n < 52 * 60 + 30)) { MTEN; TO; }
|
|
if ((n >= 52 * 60 + 30) && (n < 57 * 60 + 30)) { MFIVE; TO; }
|
|
|
|
if ((n >= 57 * 60 + 30) || (n < 2 * 60 + 30))
|
|
{
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: ONE; break;
|
|
case 2:
|
|
case 14: TWO; break;
|
|
case 3:
|
|
case 15: THREE; break;
|
|
case 4:
|
|
case 16: FOUR; break;
|
|
case 5:
|
|
case 17: HFIVE; break;
|
|
case 6:
|
|
case 18: SIX; break;
|
|
case 7:
|
|
case 19: SEVEN; break;
|
|
case 8:
|
|
case 20: EIGHT; break;
|
|
case 9:
|
|
case 21: NINE; break;
|
|
case 10:
|
|
case 22: HTEN; break;
|
|
case 11:
|
|
case 23: ELEVEN; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: TWELVE; break;
|
|
}
|
|
HOUR;
|
|
}
|
|
else
|
|
{
|
|
//if ((minute < 20) && (minute >4))
|
|
if ((n > 2 * 60 + 30) && (n < 17 * 60 + 30))
|
|
{
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: ONE; break;
|
|
case 2:
|
|
case 14: TWO; break;
|
|
case 3:
|
|
case 15: THREE; break;
|
|
case 4:
|
|
case 16: FOUR; break;
|
|
case 5:
|
|
case 17: HFIVE; break;
|
|
case 6:
|
|
case 18: SIX; break;
|
|
case 7:
|
|
case 19: SEVEN; break;
|
|
case 8:
|
|
case 20: EIGHT; break;
|
|
case 9:
|
|
case 21: NINE; break;
|
|
case 10:
|
|
case 22: HTEN; break;
|
|
case 11:
|
|
case 23: ELEVEN; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: TWELVE; break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if we are greater than 34 minutes past the hour then display
|
|
// the next hour
|
|
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: TWO; break;
|
|
case 14:
|
|
case 2: THREE; break;
|
|
case 15:
|
|
case 3: FOUR; break;
|
|
case 4:
|
|
case 16: HFIVE; break;
|
|
case 5:
|
|
case 17: SIX; break;
|
|
case 6:
|
|
case 18: SEVEN; break;
|
|
case 7:
|
|
case 19: EIGHT; break;
|
|
case 8:
|
|
case 20: NINE; break;
|
|
case 9:
|
|
case 21: HTEN; break;
|
|
case 10:
|
|
case 22: ELEVEN; break;
|
|
case 11:
|
|
case 23: TWELVE; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: ONE; break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// now we can illuminate the extra minute LEDs
|
|
|
|
if ((minute-(minute/5)*5)==1) { LED1; }
|
|
if ((minute-(minute/5)*5)==2) { LED1; LED2; }
|
|
if ((minute-(minute/5)*5)==3) { LED3; LED4; }
|
|
if ((minute-(minute/5)*5)==4) { LED4; }
|
|
|
|
// WriteLEDs();
|
|
|
|
}
|
|
|
|
void displaytime_floor(void)
|
|
{
|
|
|
|
// start by clearing the display to a known state
|
|
ledsoff();
|
|
|
|
// Now, turn on the "It is" leds
|
|
ITIS;
|
|
|
|
|
|
// now we display the appropriate minute counter
|
|
if ((minute>4) && (minute<10)) { MFIVE; PAST; }
|
|
if ((minute>9) && (minute<15)) { MTEN; PAST; }
|
|
if ((minute>14) && (minute<20)) { QUARTER; PAST; }
|
|
if ((minute>19) && (minute<25)) { MTEN; TO; HALF; }
|
|
if ((minute>24) && (minute<30)) { MFIVE; TO; HALF; }
|
|
if ((minute>29) && (minute<35)) { HALF; }
|
|
if ((minute>34) && (minute<40)) { MFIVE; PAST; HALF; }
|
|
if ((minute>39) && (minute<45)) { MTEN; PAST; HALF; }
|
|
if ((minute>44) && (minute<50)) { QUARTER; TO; }
|
|
if ((minute>49) && (minute<55)) { MTEN; TO; }
|
|
if (minute>54) { MFIVE; TO; }
|
|
|
|
|
|
|
|
if ((minute <5))
|
|
{
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: ONE; break;
|
|
case 2:
|
|
case 14: TWO; break;
|
|
case 3:
|
|
case 15: THREE; break;
|
|
case 4:
|
|
case 16: FOUR; break;
|
|
case 5:
|
|
case 17: HFIVE; break;
|
|
case 6:
|
|
case 18: SIX; break;
|
|
case 7:
|
|
case 19: SEVEN; break;
|
|
case 8:
|
|
case 20: EIGHT; break;
|
|
case 9:
|
|
case 21: NINE; break;
|
|
case 10:
|
|
case 22: HTEN; break;
|
|
case 11:
|
|
case 23: ELEVEN; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: TWELVE; break;
|
|
}
|
|
HOUR;
|
|
}
|
|
else
|
|
if ((minute < 20) && (minute >4))
|
|
{
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: ONE; break;
|
|
case 2:
|
|
case 14: TWO; break;
|
|
case 3:
|
|
case 15: THREE; break;
|
|
case 4:
|
|
case 16: FOUR; break;
|
|
case 5:
|
|
case 17: HFIVE; break;
|
|
case 6:
|
|
case 18: SIX; break;
|
|
case 7:
|
|
case 19: SEVEN; break;
|
|
case 8:
|
|
case 20: EIGHT; break;
|
|
case 9:
|
|
case 21: NINE; break;
|
|
case 10:
|
|
case 22: HTEN; break;
|
|
case 11:
|
|
case 23: ELEVEN; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: TWELVE; break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if we are greater than 34 minutes past the hour then display
|
|
// the next hour
|
|
|
|
switch (hour) {
|
|
case 1:
|
|
case 13: TWO; break;
|
|
case 14:
|
|
case 2: THREE; break;
|
|
case 15:
|
|
case 3: FOUR; break;
|
|
case 4:
|
|
case 16: HFIVE; break;
|
|
case 5:
|
|
case 17: SIX; break;
|
|
case 6:
|
|
case 18: SEVEN; break;
|
|
case 7:
|
|
case 19: EIGHT; break;
|
|
case 8:
|
|
case 20: NINE; break;
|
|
case 9:
|
|
case 21: HTEN; break;
|
|
case 10:
|
|
case 22: ELEVEN; break;
|
|
case 11:
|
|
case 23: TWELVE; break;
|
|
case 0:
|
|
case 12:
|
|
case 24: ONE; break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// now we can illuminate the extra minute LEDs
|
|
|
|
if ((minute-(minute/5)*5)==1) { LED1; }
|
|
if ((minute-(minute/5)*5)==2) { LED1; LED2; }
|
|
if ((minute-(minute/5)*5)==3) { LED1; LED2; LED3; }
|
|
if ((minute-(minute/5)*5)==4) { LED1; LED2; LED3; LED4; }
|
|
|
|
// WriteLEDs();
|
|
|
|
}
|
|
|
|
void displaytime()
|
|
{
|
|
#if (DISPLAYTIME == round)
|
|
displaytime_round();
|
|
#else
|
|
displaytime_floor();
|
|
#endif
|
|
}
|
|
|