RTC on M0 and class design without rtc and target

RTC Example Main Program

Back

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);
    }
}

All wikipages