#include "RTClib.h"
#include "I2C_LCD.h"
RTC_DS1307 rtc;
I2C_LCD lcd(39);
const int datapin = 2;
const int latchpin = 3;
const int clockpin = 4;
const int nOutput = 23;
void writeTime(int hour, int minute, int second)
{
bool registers[nOutput];
for (int i = 0; i < nOutput; ++i) {
registers[i] = LOW;
}
if (second > 30) minute++;
if (minute > 32) hour++;
// hour management
if (hour == 1 || hour == 13) {
registers[1] = HIGH;
registers[2] = HIGH;
}
else if (hour == 12 ) {
registers[1] = HIGH;
registers[13] = HIGH;
}
else if (hour == 0 ) {
registers[1] = HIGH;
registers[14] = HIGH;
}
else
{
registers[0] = HIGH;
if (hour > 12) hour -= 12;
registers[hour + 1] = HIGH;
}
//minute management
if (minute <= 2 || minute > 57)
{
registers[15] = HIGH; // o'clock
} else if (minute <= 32)
{
registers[17] = HIGH; // past
} else
registers[16] = HIGH; // to
if (minute <= 2) {}
else if (minute <= 7) {
registers[18] = HIGH; // five
}
else if (minute <= 12) {
registers[19] = HIGH; // ten
}
else if (minute <= 17) {
registers[20] = HIGH; // quarter
}
else if (minute <= 22) {
registers[21] = HIGH; // twenty
}
else if (minute <= 27) {
registers[21] = HIGH; // twenty
registers[18] = HIGH; // five
}
else if (minute <= 32) {
registers[22] = HIGH; // half
}
else if (minute <= 37) {
registers[21] = HIGH; // twenty
registers[18] = HIGH; // five
}
else if (minute <= 42) {
registers[21] = HIGH;
}
else if (minute <= 47) {
registers[20] = HIGH;
}
else if (minute <= 52) {
registers[19] = HIGH;
}
else if (minute <= 57) {
registers[18] = HIGH;
}
// Set and display registers
digitalWrite(latchpin, LOW);
for (int i = nOutput - 1; i >= 0; i--) {
digitalWrite(clockpin, LOW);
digitalWrite(datapin, registers[i]);
digitalWrite(clockpin, HIGH);
}
digitalWrite(latchpin, HIGH);
}
void setup() {
// put your setup code here, to run once:
pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(latchpin, OUTPUT);
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
lcd.begin(20, 4);
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(now.day());
lcd.setCursor(2, 0);
lcd.print('/');
lcd.setCursor(3, 0);
lcd.print(now.month());
lcd.setCursor(5, 0);
lcd.print('/');
lcd.setCursor(6, 0);
lcd.print(now.year());
lcd.setCursor(0, 1);
lcd.print(now.hour());
lcd.setCursor(2, 1);
lcd.print(':');
lcd.setCursor(3, 1);
lcd.print(now.minute());
lcd.setCursor(5, 1);
lcd.print(':');
lcd.setCursor(6, 1);
lcd.print(now.second());
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
writeTime(now.hour(), now.minute(), now.second());
delay(500);
}
Sono le
è
l'una
due
tre
quattro
cinque
sei
sette
otto
nove
dieci
undici
mezzo
giorno
mezza
notte
in punto
meno
e
cinque
dieci
un quarto
venti
mezza