FSST - Hardwarenahe Programmierung

Date Codes 1

Methoden

Date nur Tag

aus mbed-Simulator

und Intro

Copy-Paste die folgenden Codes

#include "mbed.h"

class Date      // nur day implementiert; TODO: month and year
{
private:
	uint8_t day;
public:
	Date():day(1)   // Initialisierungsliste mit konstantem Parameterwert
	{}
	// Initialisierungsliste über parametrisierten Konstruktor
	Date(uint8_t _day):day(_day) {      // entspircht:  day = _day; .... siehe unten
	}

	Date(uint8_t _day, int _tmp) {  
	    day = _day;         
	}
	~Date() { printf("Good bye\n"); }   // Destruktor
    uint8_t GetDay();                   // Prototyping
};
 
uint8_t Date::GetDay() {
    return day;
}
 
int main()
{
	Date date1;				// Instanziierung mit Standard Konstruktor und 
	Date date2(18);  	    // mit parametrisierten Konstruktor
	Date date3(30, 0);  	// mit parametrisierten Konstruktor

	printf("GetDay Test\n");
	printf("Day 1: %d\n", date1.GetDay());
	printf("Day 2: %d\n", date2.GetDay());
	printf("Day 3: %d\n", date3.GetDay());
  return 0;
}

Tag, Monat, Jahr

#include "mbed.h"

class Date
{
private:
	uint8_t day, month, year;
 public:
	Date():day(1), month(1), year(00)   // lnitialisierungsliste mit konstante Parameterwerten
	{}
	// Initialisierungsliste über parametrisierten Konstruktor
	Date(uint8_t _day, uint8_t _month, uint8_t _year):day(_day), month(_month), year(_year) { 
	    // entspircht:  day = _day; ....
	}
	~Date() { printf("Good bye\n"); }   // Destruktor
    uint8_t GetDay();	                // Prototyping
};
 
uint8_t Date::GetDay() {
    return day;
}
 
int main()
{
	Date date1;				// Instanziierung mit Standard Konstruktor und 
	Date date2(18,4,15);  	// mit parametrisierten Konstruktor
	printf("GetDay Test\n");
	printf("Day 1: %d\n", date1.GetDay());
	printf("Day 2: %d\n", date2.GetDay());
  return 0;
}

#include "mbed.h"

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <string>
using namespace std;
//#pragma warning(disable : 4996) 

#include "C12832.h"

C12832 lcd(p5, p7, p6, p8, p11);
 
const uint8_t STRMAX = 20;  
const char EOT = '.';
const char CRLF = '\n';
// ---------------- Serial RS232 Event Class  --------------------------
class SerialEvent {
        Serial _pc;
        void _risingISR();
        char _str[STRMAX]; 
        volatile bool _strOkFlag;
        int _index;
 
 
    public:
        SerialEvent(PinName tx, PinName rx) : _pc(tx, rx) { // create the Serial on the pin specified to SwEvent
            _pc.attach(this, &SerialEvent::pc_recv);        // attach DataReceive-function of this SerialEvent instance 
            _strOkFlag = false;
            _index=0;
 
        }
        void pc_recv();
        void getString(char st[]);
        int checkFlag();                                    // must in do-condition (while(true)-loop) continuously interrogated
};
// ---------------- Serial Event Class Methodes --------------------------
void SerialEvent::getString(char st[]) {
    for( int i=0; i <= _index; i++)
        st[i] = _str[i];
    _index=0;
}
 
void SerialEvent::pc_recv() {
    char c;
    while(_pc.readable()){
        c = _pc.getc();
        if((c != CRLF) && (_index < STRMAX)) {
            _str[_index++] = c;
        }
    }
    if(( c == EOT)) {           // end: . string not empty
        if(_index >= 1) {
            _strOkFlag = true;
            _str[--_index] = 0; 
        }
    }
}
 
int SerialEvent::checkFlag() {
    if( _strOkFlag ) {
        _strOkFlag = false; 
        return 1;
    }
    return 0;
}
/*
** reverse string in place 
*/
void reverse(char *s) {
char *j;
int c;
 
  j = s + strlen(s) - 1;
  while(s < j) {
    c = *s;
    *s++ = *j;
    *j-- = c;
  }
}

/* itoa:  convert n to characters in s */
 void itoa(int n, char s[], int z)
 {
     int i, sign;
 
     if ((sign = n) < 0)  /* record sign */
         n = -n;          /* make n positive */
     i = 0;
     do {       /* generate digits in reverse order */
         s[i++] = n % 10 + '0';   /* get next digit */
     } while ((n /= 10) > 0);     /* delete it */
     if (sign < 0)
         s[i++] = '-';
     s[i] = '\0';
     reverse(s);
 }
 
class Date
{
protected:
	uint8_t day, month, year;

public:
	Date() :day(1), month(1), year(00) {
	        lcd.locate(0,0);
	        lcd.cls();
	} // Initialisierungsliste mit konstante Parameterwerten
										  // Initialisierungsliste über parametrisierten Konstruktor
	Date(uint8_t _day, uint8_t _month, uint8_t _year) :day(_day), month(_month), year(_year) {}

	uint8_t GetDay();		// Methode
};

uint8_t Date::GetDay()
{
    //lcd.cls();
    lcd.locate(0,0);
    lcd.printf("Day : %d", day);
    lcd.locate(0,10);
    lcd.printf("Day : %d", day);
    lcd.locate(0,20);
    lcd.printf("Day : %d", day);
	return day;
}

class DateString : public Date
{
	string str;
public:
	DateString() :Date(20, 3, 18) {}
	// DateString():Date(2,3,11) {}  // Alternativ mit neuen Werten --> ausprobieren
	DateString(uint8_t _day, uint8_t _month, uint8_t _year) : Date(_day, _month, _year) {}

    using Date:: GetDay;

    char* GetDay(char* str) {
    	itoa(day, str, 10);	// https://fresh2refresh.com/c-programming/c-type-casting/c-itoa-function/
	    return str;
    }
};


int main()
{
	Date date1;				// Instanziierung mit Standard Konstruktor und 
	DateString date2(18, 4, 15);  	// mit parametrisierten Konstruktor
	char st[65];

	printf("Day 1: %d\n", date1.GetDay());	 // Verwenden der Methode GetDay aus Klasse Date
	printf("Day 2: %d\n", date2.GetDay());
	string str = date2.GetDay(st);
	printf("DayString %s\n", str.c_str());

	strcpy(st, date2.GetDay(st));
	printf("DayChar* %s\n", st);
	getchar();
	return 0;
}

Debugglevels

#include "mbed.h"
#include "C12832.h"

#define DEBUG_LEVEL 1   // Auskommentieren

C12832 lcd(p5, p7, p6, p8, p11);

class DigitalAus : public DigitalOut
{
    public:
    DigitalAus(PinName ld) : DigitalOut(ld){
#if DEBUG_LEVEL == 1
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("Debugging Information");
#endif
}
    
    int lese() {
        return read();
    }
    void schreibe(int value);
};

void DigitalAus :: schreibe(int value) {
#if DEBUG_LEVEL > 0
        lcd.locate(0,10);
        lcd.printf("Value: %d", value);
//#elif DEBUG_LEVEL == 2
#endif
#if DEBUG_LEVEL == 2
        lcd.locate(0,20);
        lcd.printf("DLEVEL: %d", value);
#endif
        write(value);
    }
//https://msdn.microsoft.com/en-us/library/ew2hz0yd.aspx 

All wikipages