RTC Lib & Output
Dependencies: LM75B RTC8563 mbed
Diff: main.cpp
- Revision:
- 1:9d545a2abf32
- Parent:
- 0:b2c29eef3ac4
- Child:
- 2:101ad0c50fe1
--- a/main.cpp Wed Apr 08 14:01:45 2015 +0000 +++ b/main.cpp Thu Apr 16 10:19:43 2015 +0000 @@ -1,154 +1,30 @@ +#include "RTC8563.h" #include "mbed.h" -#include "LM75B.h" - -#define RTC8563_ADR 0xA2 - -#define CONTROL1 0x00 -#define CONTROL2 0x01 -#define SECONDS 0x02 -#define MINUTES 0x03 -#define HOURS 0x04 -#define DAYS 0x05 -#define WEEKDAYS 0x06 -#define MONTHS 0x07 -#define YEARS 0x08 -#define MINUTE_ALARM 0x09 -#define HOUR_ALARM 0x0A -#define DAY_ALARM 0x0B -#define WEEKDAY_ALARM 0x0C -#define CLOCKOUT_FREQ 0x0D -#define TIMER_CINTROL 0x0E -#define TIMER 0x0F -#define _READ 0x01 +#include "const.h" char year, month, day, week; char hour, minute, sec; char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; -BusOut myled(P1_13,P1_12,P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1); -AnalogIn LDR (p16); - -InterruptIn sw1(P0_10); -InterruptIn sw2(P0_15); -InterruptIn sw3(P0_23); -InterruptIn sw4(P1_16); - Serial pc(USBTX, USBRX); -LM75B sensor(p28, p27); -I2C i2c(p28, p27); - -typedef enum state_t {menue, date, ldr, temp} state_t; -state_t state = menue; - -void getNextState(); -void printTime(); -void flashLDR(); -void rtc_init(); -char rtc_read(char address); -void rtc_write(char address, char value); +RTC8563 rtc(p27, p28); int main() { - sensor.open(); - rtc_init(); - - sw1.rise(&getNextState); - sw2.rise(&getNextState); - sw3.rise(&getNextState); - sw4.rise(&getNextState); + rtc.init(15, 4, 16, 12, 16, 0, 4); while(1) { - myled = 0x0000; - switch(state) { - case menue: - pc.printf("########### M E N U ###########"); - pc.printf("1.Taste => Menue anzeigen\n\r"); - pc.printf("2.Taste => Uhrzeit und Datum\n\r"); - pc.printf("3.Taste => LDR-Wert und LED-Array\n\r"); - pc.printf("4.Taste => Temperatur anzeigen\n\r"); - break; - case date: - printTime(); - break; - case ldr: - pc.printf("LDR: %f\n", LDR.read()); - flashLDR(); - break; - case temp: - pc.printf("Temperatur: %.1f\n\r", (float) sensor); - break; - } - pc.printf("##############################\n\r"); + year = rtc.read(YEARS); + month = rtc.read(MONTHS); + day = rtc.read(DAYS); + week = rtc.read(WEEKDAYS); + hour = rtc.read(HOURS); + minute = rtc.read(MINUTES); + sec = rtc.read(SECONDS); + + pc.printf("20%d/%02d/%02d %s\n", year, month, day, week_chr[week]); // Date + pc.printf("%02d:%02d:%02d\n", hour, minute, sec); // Time wait(0.2); } } - -void flashLDR() -{ - for(float w = 0; w < 0.6; w+=0.05) - if(LDR>=w) - myled = (myled << 1) + 1; -} - -void getNextState() -{ - if(sw1) state = menue; - else if(sw2) state = date; - else if(sw3) state = ldr; - else if (sw4) state = temp; -} - -void printTime() -{ - year = rtc_read(YEARS); - month = rtc_read(MONTHS); - day = rtc_read(DAYS); - week = rtc_read(WEEKDAYS); - hour = rtc_read(HOURS); - minute = rtc_read(MINUTES); - sec = rtc_read(SECONDS); - - pc.printf("20%d/%02d/%02d %s\n", year, month, day, week_chr[week]); // Date - pc.printf("%02d:%02d:%02d\n", hour, minute, sec); // Time -} - -void rtc_init() -{ - pc.printf("RTC-Setup..."); - - rtc_write(CONTROL1, 0x20); //stop - rtc_write(CONTROL2, 0x00); - rtc_write(YEARS, 15); - rtc_write(MONTHS,3); - rtc_write(DAYS, 13); - rtc_write(HOURS, 21); - rtc_write(MINUTES, 7); - rtc_write(SECONDS, 0); - rtc_write(WEEKDAYS, 5); - rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz - rtc_write(TIMER_CINTROL, 0x00); - rtc_write(CONTROL1, 0x00); //start -} - -char rtc_read(char address) -{ - char value; - i2c.start(); - i2c.write(RTC8563_ADR); - i2c.write(address); - i2c.start(); - i2c.write(RTC8563_ADR | _READ); - value = i2c.read(0); - i2c.stop(); - - return value; -} -void rtc_write(char address, char value) -{ - i2c.start(); - i2c.write(RTC8563_ADR); - i2c.write(address); - i2c.write(value); - i2c.stop(); -}