A Real Time Clock program using the PCF8583_rtc library with IRremote control. The output is to my 4 digit Nixie display which uses a simple I2c BCD interface
Dependencies: PCF8583_rtc mbed
main.cpp
- Committer:
- dennyem
- Date:
- 2014-02-25
- Revision:
- 3:07c00c82338c
- Parent:
- 2:4184f92440a1
File content as of revision 3:07c00c82338c:
#include <mbed.h> #include "IRremote.h" #include "PCF8583_rtc.h" void NixieDisplay(void); DigitalOut Red(P0_7); DigitalOut Green(P0_17); DigitalOut Blue(P0_16); I2C i2c(P0_10, P0_11); // sda, scl PCF8583rtc rtc(&i2c, PCF8583_addr_2); IRremote rc5(P0_0); // i2c addresses const int ADDR_8574_1 = 0x70; const int ADDR_8574_2 = 0x72; int alarm = OFF; int setTimer = OFF; int main() { struct DateTime_t dtr; char hours; char mins; Red = Green = Blue = 1; i2c.frequency(400000); /* rtc.configureControlReg(0); dtr = rtc.read(TIME); //Set the clock from scratch dtr.time.hours = rtc.bin2bcd(8); dtr.time.minutes = rtc.bin2bcd(22); rtc.write(TIME, dtr); wait(.1); */ while(1) { dtr = rtc.read(TIME); i2c.write(ADDR_8574_1, &dtr.time.hours, 1); i2c.write(ADDR_8574_2, &dtr.time.minutes, 1); i2c.stop(); if (rc5.readclear(0) != 0xff) { if(rc5.read(2) != 0xff && rc5.read(3) != 0xff) { hours = ((dtr.time.hours >> 4) * 10) + (dtr.time.hours & 0x0f); mins = ((dtr.time.minutes >> 4) * 10) + (dtr.time.minutes & 0x0f); switch(rc5.read(2)) { case 0x47: //Up hours++; dtr.time.hours = rtc.bin2bcd(hours); break; case 0x48: //Down hours--; dtr.time.hours = rtc.bin2bcd(hours); break; case 0x59: //Left mins++; dtr.time.minutes = rtc.bin2bcd(mins); break; case 0x5a: //Right mins--; dtr.time.minutes = rtc.bin2bcd(mins); break; } rtc.write(TIME, dtr); //Set the current date and time rc5.clear(); } } wait(.1); } }