Matthias Reichstam
/
UebenMarkus2_TINF_16102018
Ueben mit Markus 2 TINF 16102018
main.cpp@0:9bd8aa4fca8a, 2018-11-15 (annotated)
- Committer:
- Reichi19
- Date:
- Thu Nov 15 17:26:48 2018 +0000
- Revision:
- 0:9bd8aa4fca8a
?ben mit markus TINF
Who changed what in which revision?
User | Revision | Line number | New 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 | } |