Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
serialdata.cpp@0:9d530d56a118, 2016-07-24 (annotated)
- Committer:
- clynamen
- Date:
- Sun Jul 24 14:42:26 2016 +0000
- Revision:
- 0:9d530d56a118
violante;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
clynamen | 0:9d530d56a118 | 1 | #include <mbed.h> |
clynamen | 0:9d530d56a118 | 2 | |
clynamen | 0:9d530d56a118 | 3 | extern Serial pc; |
clynamen | 0:9d530d56a118 | 4 | |
clynamen | 0:9d530d56a118 | 5 | void serialSend(float v) { |
clynamen | 0:9d530d56a118 | 6 | pc.printf("aaaa"); // header |
clynamen | 0:9d530d56a118 | 7 | unsigned char* data = (unsigned char*) &v; |
clynamen | 0:9d530d56a118 | 8 | for (int i = 0; i < 4; i++) { |
clynamen | 0:9d530d56a118 | 9 | pc.putc(data[i]); |
clynamen | 0:9d530d56a118 | 10 | } |
clynamen | 0:9d530d56a118 | 11 | pc.printf("\r\n"); // end of line |
clynamen | 0:9d530d56a118 | 12 | } |
clynamen | 0:9d530d56a118 | 13 | |
clynamen | 0:9d530d56a118 | 14 | void serialSendVec(float vec[], int length) { |
clynamen | 0:9d530d56a118 | 15 | pc.printf("aaaa"); // header |
clynamen | 0:9d530d56a118 | 16 | unsigned char* data = (unsigned char*) vec; |
clynamen | 0:9d530d56a118 | 17 | for (int i = 0; i < length*4; i++) { |
clynamen | 0:9d530d56a118 | 18 | pc.putc(data[i]); |
clynamen | 0:9d530d56a118 | 19 | } |
clynamen | 0:9d530d56a118 | 20 | pc.printf("\r\n"); // end of line |
clynamen | 0:9d530d56a118 | 21 | |
clynamen | 0:9d530d56a118 | 22 | } |
clynamen | 0:9d530d56a118 | 23 | |
clynamen | 0:9d530d56a118 | 24 | enum RecvState { |
clynamen | 0:9d530d56a118 | 25 | NONE, |
clynamen | 0:9d530d56a118 | 26 | HEADER, |
clynamen | 0:9d530d56a118 | 27 | DATA, |
clynamen | 0:9d530d56a118 | 28 | END |
clynamen | 0:9d530d56a118 | 29 | }; |
clynamen | 0:9d530d56a118 | 30 | |
clynamen | 0:9d530d56a118 | 31 | float serialRecv() { |
clynamen | 0:9d530d56a118 | 32 | RecvState state = NONE; |
clynamen | 0:9d530d56a118 | 33 | int headerStep = 0; |
clynamen | 0:9d530d56a118 | 34 | int dataStep = 0; |
clynamen | 0:9d530d56a118 | 35 | bool receiving = 1; |
clynamen | 0:9d530d56a118 | 36 | char buf[8]; |
clynamen | 0:9d530d56a118 | 37 | float v = -10; |
clynamen | 0:9d530d56a118 | 38 | while(receiving) { |
clynamen | 0:9d530d56a118 | 39 | char c = pc.getc(); |
clynamen | 0:9d530d56a118 | 40 | switch(state) { |
clynamen | 0:9d530d56a118 | 41 | case NONE: |
clynamen | 0:9d530d56a118 | 42 | case HEADER: |
clynamen | 0:9d530d56a118 | 43 | if(c == 'a') { |
clynamen | 0:9d530d56a118 | 44 | headerStep++; |
clynamen | 0:9d530d56a118 | 45 | if(headerStep == 4) { |
clynamen | 0:9d530d56a118 | 46 | state = DATA; |
clynamen | 0:9d530d56a118 | 47 | dataStep = 0; |
clynamen | 0:9d530d56a118 | 48 | v = 0; |
clynamen | 0:9d530d56a118 | 49 | } |
clynamen | 0:9d530d56a118 | 50 | } else { |
clynamen | 0:9d530d56a118 | 51 | headerStep = 0; |
clynamen | 0:9d530d56a118 | 52 | } |
clynamen | 0:9d530d56a118 | 53 | break; |
clynamen | 0:9d530d56a118 | 54 | case DATA: |
clynamen | 0:9d530d56a118 | 55 | dataStep += 1; |
clynamen | 0:9d530d56a118 | 56 | buf[dataStep-1] = c; |
clynamen | 0:9d530d56a118 | 57 | if(dataStep == 4) { |
clynamen | 0:9d530d56a118 | 58 | state = END; |
clynamen | 0:9d530d56a118 | 59 | v = *(float*)buf; |
clynamen | 0:9d530d56a118 | 60 | } |
clynamen | 0:9d530d56a118 | 61 | break; |
clynamen | 0:9d530d56a118 | 62 | case END: |
clynamen | 0:9d530d56a118 | 63 | if(c == '\r' && pc.getc() == '\n') { |
clynamen | 0:9d530d56a118 | 64 | return v; |
clynamen | 0:9d530d56a118 | 65 | } else { |
clynamen | 0:9d530d56a118 | 66 | state = NONE; |
clynamen | 0:9d530d56a118 | 67 | headerStep = 0; |
clynamen | 0:9d530d56a118 | 68 | } |
clynamen | 0:9d530d56a118 | 69 | break; |
clynamen | 0:9d530d56a118 | 70 | } |
clynamen | 0:9d530d56a118 | 71 | } |
clynamen | 0:9d530d56a118 | 72 | return v; |
clynamen | 0:9d530d56a118 | 73 | } |