RTC on M0 and class design without rtc and target
RTC Example Main Program
main.cpp
// ToDo: Alarm in Klasse // 1. String aus int zusammenstellen // 2. String in Komponenten zerlegen und RTC/Alarm setzen // 3. Mehrfachvererbung Date/Time als ganzen String // 4. Mehrfachvererbung Uhr p95 // puer virtual methodes p102 // abstrakte Basisklassen p103 // Tasks: // 1. Klasse Date/Time erweitern day, ... // 2. Vererbung Zeit/Datum --> Deutsch: Setzten, Stellen, Zählen // 3. Drucke // 4. Zu Datum einen Konstruktor um das Datum zu setzen // 5. Methode, die den Wochentag mit ausgibt // 6. Von Datum die Klasse DatumAusgabe ableiten, die das Datum in verschiedenen Versionen ausgibt Do, der 14. Juli 2015 .... // 7. Virtuelle Methode DruckDatum in 6., die den Wochentag ausgibt // 8. aus 7. DruckDatum überschreiben die das Datum in spez. Form ausgibt, wie Do, der 14. Juli 2015 #include "mbed.h" #include "const.h" #include "rtc.h" #include "Date.h" #include "Datestr.h" #include "Time.h" #include "string" #include "Clock.h" Serial pc(USBTX, USBRX); //I2C i2c(p28, p27); char year, month, day, week; char hour, minute, sec; string tag ("Montag"); string week_str[7] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; char week_chr[7][4] = {"MON","TUE","WED","THU","FRI","SAT","SUN"}; char hour_a, minute_a, week_a, reg_01; #ifdef TARGET_LPC11XX InterruptIn alarm(P1_28); #else InterruptIn alarm(p15); // LPC1768 JoyStick up #endif DigitalOut myled1(LED1); DigitalOut myled2(LED2); void push1() // Interruptfunktion alarm { pc.printf("********\n" ); pc.printf("ALARM\n" ); pc.printf("********\n" ); myled1= 1; } bool state = false; InterruptIn sw1(P0_10); void getNextState() { if(sw1) state = !state; } int main() { sw1.rise(&getNextState); RTC *pRtc; // Zeiger vom Type der Klasse RTC pRtc = new RTC; // Mit new wird Speicher wird auf dem Heap reserviert #ifdef TARGET_LPC11XX pRtc = new RTC(p28, p27); // Speicher mit parametrisierten Konstruktor reserviert #endif pRtc->rtc_init(); // Auf die Memeber (Elemente) wird über den Operator -> zugegriffen delete pRtc; Time rtc; //(p28, p27); Date *pDate; Date date; Datestr datestr; pDate = &date; //pc.printf("%s \n", pDate->Ausgabe()); Clock clock; clock.GetDay(); clock.GetHours(); pc.printf("Setting up RTC\n"); //rtc.rtc_init(); alarm.fall(&push1); pc.printf("Setting up RTC\n"); rtc.rtc_alarm(); myled1 = 0; while(1) { week = rtc.rtc_read(WEEKDAYS); if(state) // change state for virtual methode GetDay p79 pDate = &date; else pDate = &datestr; // Alarm hour_a = rtc.rtc_read(HOUR_ALARM); minute_a = rtc.rtc_read(MINUTE_ALARM); week_a = rtc.rtc_read(WEEKDAY_ALARM); pc.printf("%s \n", pDate->GetDay(date.GetDay())); // Plain Old Data pc.printf("%s", clock.Print()); wait(1); } }