Ueben mit Markus 2 TINF 16102018

Dependencies:   mbed

Committer:
Reichi19
Date:
Thu Nov 15 17:26:48 2018 +0000
Revision:
0:9bd8aa4fca8a
?ben mit markus TINF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reichi19 0:9bd8aa4fca8a 1 #include "mbed.h"
Reichi19 0:9bd8aa4fca8a 2
Reichi19 0:9bd8aa4fca8a 3
Reichi19 0:9bd8aa4fca8a 4
Reichi19 0:9bd8aa4fca8a 5 // ---------------- Serial RS232 Event Class --------------------------
Reichi19 0:9bd8aa4fca8a 6 const uint8_t STRMAX = 20; // const = Konstante Variable --> Varable mit einen bestimmte Typ der immer gleich bleibt
Reichi19 0:9bd8aa4fca8a 7 const char EOT = '.'; // const = Konstante Variable --> Varable mit einen bestimmte Typ der immer gleich bleibt
Reichi19 0:9bd8aa4fca8a 8 const char CRLF = '\n'; // const = Konstante Variable --> Varable mit einen bestimmte Typ der immer gleich bleibt
Reichi19 0:9bd8aa4fca8a 9
Reichi19 0:9bd8aa4fca8a 10 class SerialEvent { // classe erstellen und weisen den Namen zu
Reichi19 0:9bd8aa4fca8a 11 Serial _pc; // Ertellen des Objekts _pc aus der Klasse Serial
Reichi19 0:9bd8aa4fca8a 12 void _risingISR(); // Methode erstellen
Reichi19 0:9bd8aa4fca8a 13 char _str[STRMAX]; // Es wird ein String erstellt mit der Maximallänge von STRMAX(20)
Reichi19 0:9bd8aa4fca8a 14 volatile bool _strOkFlag; // VOLATILE --> Wert zur Laufzeit bool--> Datentyp _strOkFlag --> Name der Variable
Reichi19 0:9bd8aa4fca8a 15 int _index; // Variable mit dem Datentyp Int
Reichi19 0:9bd8aa4fca8a 16
Reichi19 0:9bd8aa4fca8a 17 // Public Ist öffentlich und von extern zugänglich
Reichi19 0:9bd8aa4fca8a 18 public:
Reichi19 0:9bd8aa4fca8a 19 // SerialEvent --> Konstruktor / PinName --> PIN bezeichnung vom Mbed / tx --> übergabeparameter / : --> kurzzuweisung
Reichi19 0:9bd8aa4fca8a 20 SerialEvent(PinName tx, PinName rx) : _pc(tx, rx) { // create the Serial on the pin specified to SwEvent
Reichi19 0:9bd8aa4fca8a 21 // attach --> anhängen / Obejekt SerialEvent / & --> Pointer / pc_recv --> Funktion / :: braucht man wenn es auserhalb der Classe steht aber zur Classe gehört
Reichi19 0:9bd8aa4fca8a 22 _pc.attach(callback(this, &SerialEvent::pc_recv)); // attach DataReceive-function of this SerialEvent instance
Reichi19 0:9bd8aa4fca8a 23 _strOkFlag = false; // Variable zuweisen auf false
Reichi19 0:9bd8aa4fca8a 24 _index=0; // Variable zuweisen auf 0
Reichi19 0:9bd8aa4fca8a 25
Reichi19 0:9bd8aa4fca8a 26 }
Reichi19 0:9bd8aa4fca8a 27 void pc_recv(); // Methode prototyping ( Namendliche erwähnung in der Klasse damit der Combiler weis, dass die Funktion vorhanden ist
Reichi19 0:9bd8aa4fca8a 28 void getString(char st[]); // Methode prototyping ( Namendliche erwähnung in der Klasse damit der Combiler weis, dass die Funktion vorhanden ist
Reichi19 0:9bd8aa4fca8a 29 int checkFlag(); // must in do-condition (while(true)-loop) continuously interrogated
Reichi19 0:9bd8aa4fca8a 30 };
Reichi19 0:9bd8aa4fca8a 31
Reichi19 0:9bd8aa4fca8a 32 // ---------------- Serial Event Class Methodes --------------------------
Reichi19 0:9bd8aa4fca8a 33 void SerialEvent::getString(char st[]) {
Reichi19 0:9bd8aa4fca8a 34 for( int i=0; i <= _index; i++)
Reichi19 0:9bd8aa4fca8a 35 st[i] = _str[i];
Reichi19 0:9bd8aa4fca8a 36 _index=0;
Reichi19 0:9bd8aa4fca8a 37 }
Reichi19 0:9bd8aa4fca8a 38
Reichi19 0:9bd8aa4fca8a 39 void SerialEvent::pc_recv() {
Reichi19 0:9bd8aa4fca8a 40 char c;
Reichi19 0:9bd8aa4fca8a 41 while(_pc.readable()){ // _pc.readable schaut nach ob Daten im Puffer zum auslesen sind oder nicht
Reichi19 0:9bd8aa4fca8a 42 c = _pc.getc();
Reichi19 0:9bd8aa4fca8a 43 if((c != CRLF) && (_index < STRMAX)) {
Reichi19 0:9bd8aa4fca8a 44 _str[_index++] = c;
Reichi19 0:9bd8aa4fca8a 45 }
Reichi19 0:9bd8aa4fca8a 46 }
Reichi19 0:9bd8aa4fca8a 47 if(( c == EOT)) { // end: . string not empty
Reichi19 0:9bd8aa4fca8a 48 if(_index >= 1) {
Reichi19 0:9bd8aa4fca8a 49 _strOkFlag = true;
Reichi19 0:9bd8aa4fca8a 50 _str[--_index] = 0;
Reichi19 0:9bd8aa4fca8a 51 }
Reichi19 0:9bd8aa4fca8a 52 }
Reichi19 0:9bd8aa4fca8a 53 }
Reichi19 0:9bd8aa4fca8a 54
Reichi19 0:9bd8aa4fca8a 55 int SerialEvent::checkFlag() {
Reichi19 0:9bd8aa4fca8a 56 if( _strOkFlag ) {
Reichi19 0:9bd8aa4fca8a 57 _strOkFlag = false;
Reichi19 0:9bd8aa4fca8a 58 return 1;
Reichi19 0:9bd8aa4fca8a 59 }
Reichi19 0:9bd8aa4fca8a 60 return 0;
Reichi19 0:9bd8aa4fca8a 61 }
Reichi19 0:9bd8aa4fca8a 62
Reichi19 0:9bd8aa4fca8a 63 SerialEvent se(USBTX, USBRX);
Reichi19 0:9bd8aa4fca8a 64 char str[STRMAX];
Reichi19 0:9bd8aa4fca8a 65
Reichi19 0:9bd8aa4fca8a 66 int main() {
Reichi19 0:9bd8aa4fca8a 67 printf("Hello\n");
Reichi19 0:9bd8aa4fca8a 68 while(1) {
Reichi19 0:9bd8aa4fca8a 69 if(se.checkFlag()) {
Reichi19 0:9bd8aa4fca8a 70 se.getString(str);
Reichi19 0:9bd8aa4fca8a 71 printf("String: %s\n", str);
Reichi19 0:9bd8aa4fca8a 72 }
Reichi19 0:9bd8aa4fca8a 73 }
Reichi19 0:9bd8aa4fca8a 74 }