シリアル通信ようのライブラリです。charとfloatのデータを送受信できます。
Library to send multiple bytes using UART.
UART_multiData.cpp@0:3314f526a5f1, 2016-01-27 (annotated)
- Committer:
- WAT34
- Date:
- Wed Jan 27 07:46:01 2016 +0000
- Revision:
- 0:3314f526a5f1
I think it will work
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WAT34 | 0:3314f526a5f1 | 1 | #include "UART_multiData.h" |
WAT34 | 0:3314f526a5f1 | 2 | #include "mbed.h" |
WAT34 | 0:3314f526a5f1 | 3 | |
WAT34 | 0:3314f526a5f1 | 4 | union float2bytes |
WAT34 | 0:3314f526a5f1 | 5 | { |
WAT34 | 0:3314f526a5f1 | 6 | float f; |
WAT34 | 0:3314f526a5f1 | 7 | char b[sizeof(float)]; |
WAT34 | 0:3314f526a5f1 | 8 | }; |
WAT34 | 0:3314f526a5f1 | 9 | |
WAT34 | 0:3314f526a5f1 | 10 | UART_multiData::UART_multiData(PinName rx,PinName tx,unsigned int c_Num,unsigned int f_Num): _serial_(rx,tx) |
WAT34 | 0:3314f526a5f1 | 11 | { |
WAT34 | 0:3314f526a5f1 | 12 | _cNum = c_Num; |
WAT34 | 0:3314f526a5f1 | 13 | _fNum = f_Num; |
WAT34 | 0:3314f526a5f1 | 14 | _cdata = NULL; |
WAT34 | 0:3314f526a5f1 | 15 | _fdata = NULL; |
WAT34 | 0:3314f526a5f1 | 16 | HEADER = 255; |
WAT34 | 0:3314f526a5f1 | 17 | } |
WAT34 | 0:3314f526a5f1 | 18 | void UART_multiData::SetCaddr(char cdata[]) |
WAT34 | 0:3314f526a5f1 | 19 | { |
WAT34 | 0:3314f526a5f1 | 20 | _cdata =cdata; |
WAT34 | 0:3314f526a5f1 | 21 | } |
WAT34 | 0:3314f526a5f1 | 22 | |
WAT34 | 0:3314f526a5f1 | 23 | void UART_multiData::SetFaddr(float fdata[]) |
WAT34 | 0:3314f526a5f1 | 24 | { |
WAT34 | 0:3314f526a5f1 | 25 | _fdata = fdata; |
WAT34 | 0:3314f526a5f1 | 26 | } |
WAT34 | 0:3314f526a5f1 | 27 | |
WAT34 | 0:3314f526a5f1 | 28 | int UART_multiData::PutData() |
WAT34 | 0:3314f526a5f1 | 29 | { |
WAT34 | 0:3314f526a5f1 | 30 | if ((_cdata == NULL) || (_fdata == NULL) ||(_serial_.writeable())) { |
WAT34 | 0:3314f526a5f1 | 31 | return 1; |
WAT34 | 0:3314f526a5f1 | 32 | } |
WAT34 | 0:3314f526a5f1 | 33 | float2bytes putf[_fNum]; |
WAT34 | 0:3314f526a5f1 | 34 | for (unsigned int i = 0; i < _fNum; i++) { |
WAT34 | 0:3314f526a5f1 | 35 | putf[i].f = _fdata[i]; |
WAT34 | 0:3314f526a5f1 | 36 | } |
WAT34 | 0:3314f526a5f1 | 37 | _serial_.putc(HEADER); |
WAT34 | 0:3314f526a5f1 | 38 | for (unsigned int i = 0; i < _cNum; i++) { |
WAT34 | 0:3314f526a5f1 | 39 | _serial_.putc(_cdata[i]); |
WAT34 | 0:3314f526a5f1 | 40 | } |
WAT34 | 0:3314f526a5f1 | 41 | for (unsigned int i = 0; i < _fNum; i++) { |
WAT34 | 0:3314f526a5f1 | 42 | for (unsigned int j= 0; j < sizeof(float); j++) { |
WAT34 | 0:3314f526a5f1 | 43 | _serial_.putc(putf[i].b[j]); |
WAT34 | 0:3314f526a5f1 | 44 | } |
WAT34 | 0:3314f526a5f1 | 45 | } |
WAT34 | 0:3314f526a5f1 | 46 | return 0; |
WAT34 | 0:3314f526a5f1 | 47 | } |
WAT34 | 0:3314f526a5f1 | 48 | |
WAT34 | 0:3314f526a5f1 | 49 | int UART_multiData::GetData() |
WAT34 | 0:3314f526a5f1 | 50 | { |
WAT34 | 0:3314f526a5f1 | 51 | if ((_cdata == NULL) || (_fdata == NULL)) { |
WAT34 | 0:3314f526a5f1 | 52 | return 1; |
WAT34 | 0:3314f526a5f1 | 53 | } |
WAT34 | 0:3314f526a5f1 | 54 | float2bytes getf[_fNum]; |
WAT34 | 0:3314f526a5f1 | 55 | for (unsigned int i = 0; i < _fNum; i++) { |
WAT34 | 0:3314f526a5f1 | 56 | getf[i].f = _fdata[i]; |
WAT34 | 0:3314f526a5f1 | 57 | } |
WAT34 | 0:3314f526a5f1 | 58 | if ((_serial_.getc() == HEADER) && _serial_.readable()) { |
WAT34 | 0:3314f526a5f1 | 59 | for (unsigned int i = 0; i < _cNum; i++) { |
WAT34 | 0:3314f526a5f1 | 60 | _cdata[i] = _serial_.getc(); |
WAT34 | 0:3314f526a5f1 | 61 | } |
WAT34 | 0:3314f526a5f1 | 62 | for (unsigned int i = 0; i < _fNum; i++) { |
WAT34 | 0:3314f526a5f1 | 63 | for (unsigned int j = 0; j < sizeof(float); j++) { |
WAT34 | 0:3314f526a5f1 | 64 | getf[i].b[j] = _serial_.getc(); |
WAT34 | 0:3314f526a5f1 | 65 | } |
WAT34 | 0:3314f526a5f1 | 66 | } |
WAT34 | 0:3314f526a5f1 | 67 | for (unsigned int i = 0; i < _fNum; i++) { |
WAT34 | 0:3314f526a5f1 | 68 | _fdata[i] = getf[i].f; |
WAT34 | 0:3314f526a5f1 | 69 | } |
WAT34 | 0:3314f526a5f1 | 70 | return 0; |
WAT34 | 0:3314f526a5f1 | 71 | }else{ |
WAT34 | 0:3314f526a5f1 | 72 | return 1; |
WAT34 | 0:3314f526a5f1 | 73 | } |
WAT34 | 0:3314f526a5f1 | 74 | } |
WAT34 | 0:3314f526a5f1 | 75 | |
WAT34 | 0:3314f526a5f1 | 76 | void UART_multiData::SetHeader(unsigned char header) |
WAT34 | 0:3314f526a5f1 | 77 | { |
WAT34 | 0:3314f526a5f1 | 78 | HEADER = header; |
WAT34 | 0:3314f526a5f1 | 79 | } |
WAT34 | 0:3314f526a5f1 | 80 | |
WAT34 | 0:3314f526a5f1 | 81 | void UART_multiData::SetBaudrate(unsigned int baud) |
WAT34 | 0:3314f526a5f1 | 82 | { |
WAT34 | 0:3314f526a5f1 | 83 | _serial_.baud(baud); |
WAT34 | 0:3314f526a5f1 | 84 | } |