Uebung Serielle Schnittstelle - Interrupt
Dependencies: mbed
main.cpp@0:82fe2f4476f9, 2019-01-31 (annotated)
- 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?
User | Revision | Line number | New 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 | } |