Uebung Serielle Schnittstelle - Interrupt

Dependencies:   mbed

Committer:
Powers
Date:
Thu Jan 31 22:07:53 2019 +0000
Revision:
0:82fe2f4476f9
Uebung mit serieller Schnittstelle; RX - Interrupt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Powers 0:82fe2f4476f9 1 #include "mbed.h"
Powers 0:82fe2f4476f9 2
Powers 0:82fe2f4476f9 3 // Uebung mit serieller Schnittstelle und Interrupts
Powers 0:82fe2f4476f9 4 // Ausgabe - SERIAL
Powers 0:82fe2f4476f9 5 // Programm wartet auf eine Eingabe, der String wird dann jeweils um
Powers 0:82fe2f4476f9 6 // die Eingabe erweitert
Powers 0:82fe2f4476f9 7 // RESET durch Eingabe von '.' [PUNKT]
Powers 0:82fe2f4476f9 8
Powers 0:82fe2f4476f9 9
Powers 0:82fe2f4476f9 10 class SerialEvent
Powers 0:82fe2f4476f9 11 {
Powers 0:82fe2f4476f9 12 private:
Powers 0:82fe2f4476f9 13 Serial _connection;
Powers 0:82fe2f4476f9 14 bool _flag;
Powers 0:82fe2f4476f9 15 int _x;
Powers 0:82fe2f4476f9 16
Powers 0:82fe2f4476f9 17 public:
Powers 0:82fe2f4476f9 18 SerialEvent(PinName tx, PinName rx): _connection(tx, rx) // Construktor
Powers 0:82fe2f4476f9 19 {
Powers 0:82fe2f4476f9 20 _connection.attach(callback(this, &SerialEvent::readSerial));
Powers 0:82fe2f4476f9 21 }
Powers 0:82fe2f4476f9 22
Powers 0:82fe2f4476f9 23 char content[200];
Powers 0:82fe2f4476f9 24
Powers 0:82fe2f4476f9 25 void readSerial(void);
Powers 0:82fe2f4476f9 26 bool checkFlag(void);
Powers 0:82fe2f4476f9 27 };
Powers 0:82fe2f4476f9 28
Powers 0:82fe2f4476f9 29
Powers 0:82fe2f4476f9 30 void SerialEvent::readSerial(void)
Powers 0:82fe2f4476f9 31 {
Powers 0:82fe2f4476f9 32 if (_connection.readable()) content[_x] = _connection.getc();
Powers 0:82fe2f4476f9 33
Powers 0:82fe2f4476f9 34 if (content[_x] == '.')
Powers 0:82fe2f4476f9 35 {
Powers 0:82fe2f4476f9 36 content[_x] = '\0';
Powers 0:82fe2f4476f9 37 _x = 0;
Powers 0:82fe2f4476f9 38 _flag = 0;
Powers 0:82fe2f4476f9 39
Powers 0:82fe2f4476f9 40
Powers 0:82fe2f4476f9 41 int y = 0;
Powers 0:82fe2f4476f9 42 while(content[y] != '\0')
Powers 0:82fe2f4476f9 43 {
Powers 0:82fe2f4476f9 44 content[y] = '\0';
Powers 0:82fe2f4476f9 45 y++;
Powers 0:82fe2f4476f9 46 }
Powers 0:82fe2f4476f9 47 y = 0;
Powers 0:82fe2f4476f9 48 }
Powers 0:82fe2f4476f9 49 else
Powers 0:82fe2f4476f9 50 {
Powers 0:82fe2f4476f9 51 _x++;
Powers 0:82fe2f4476f9 52 _flag = 1;
Powers 0:82fe2f4476f9 53 }
Powers 0:82fe2f4476f9 54
Powers 0:82fe2f4476f9 55 }
Powers 0:82fe2f4476f9 56
Powers 0:82fe2f4476f9 57 bool SerialEvent::checkFlag(void)
Powers 0:82fe2f4476f9 58 {
Powers 0:82fe2f4476f9 59 return _flag;
Powers 0:82fe2f4476f9 60 }
Powers 0:82fe2f4476f9 61
Powers 0:82fe2f4476f9 62 SerialEvent connectme(USBTX, USBRX); // Neues Objekt erstellen und übergabe von TX und RX
Powers 0:82fe2f4476f9 63
Powers 0:82fe2f4476f9 64 int main()
Powers 0:82fe2f4476f9 65 {
Powers 0:82fe2f4476f9 66 // Ausgabe des momentanen Status sowie dem attachten String
Powers 0:82fe2f4476f9 67 while(1)
Powers 0:82fe2f4476f9 68 {
Powers 0:82fe2f4476f9 69 printf("Flag Status: %i String: %s \n", connectme.checkFlag(), connectme.content);
Powers 0:82fe2f4476f9 70 wait_ms(200);
Powers 0:82fe2f4476f9 71 }
Powers 0:82fe2f4476f9 72 }