/* Reloj RTC DS1307, Pantalla LCD 16x2, Receptor/Mando IR, Servoreloj */
#include <Wire.h>
#include "RTClib.h"
#include <IRremote.h>
#include <LiquidCrystal.h>
#include <Servo.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
RTC_DS1307 RTC;
int recv = 2;
IRrecv ir(recv);
int tick = 5;
int tack = 4;
int tic = 0;
int tac = 180;
Servo reloj;
void setup () {
pinMode(tick, OUTPUT); pinMode(tack, OUTPUT);
Serial.begin(9600); Wire.begin(); RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__)); /* La hora a veces puede o
no ser exacta por lag */
ir.enableIRIn(); lcd.begin(16, 2); digitalWrite(tick, LOW);
digitalWrite(tack, LOW); lcd.noDisplay(); reloj.detach();
}
void loop () {
if(ir.decode()) {
ir.resume();
}
mando();
}
void mando() {
switch(ir.decodedIRData.command) {
case 162:
lcd.display(); reloj.attach(6); lcd.setCursor(0,0);
lcd.blink(); lcd.write("Reloj");
break;
case 226:
reloj.write(tic);
return setup();
break;
case 34:
do {
DateTime now = RTC.now();
/* Imprimimos la fecha */
lcd.setCursor(0,0);
lcd.print(now.day(), DEC); lcd.print('/');
lcd.print(now.month(), DEC); lcd.print('/');
lcd.print(now.year(), DEC); lcd.print(' ');
/* Imprimimos la hora */
lcd.setCursor(0,1);
lcd.print(now.hour(), DEC); lcd.print(':');
lcd.print(now.minute(), DEC); lcd.print(':');
lcd.print(now.second(), DEC);
} while (pendulo());
delay(1000);
break;
case 168:
lcd.clear(); reloj.write(90);
delay(1000);
return setup();
break;
}
}
bool pendulo() {
reloj.write(tic); lcd.setCursor(11,0); lcd.blink();
lcd.print("Tic"); digitalWrite(tick, HIGH); digitalWrite(tack, LOW);
lcd.setCursor(11,1); lcd.print(" ");
delay(1000);
reloj.write(tac); lcd.setCursor(11,1); lcd.blink(); lcd.print("Tac");
digitalWrite(tack, HIGH); digitalWrite(tick, LOW); lcd.setCursor(11,0);
lcd.print(" ");
}