シリアル通信ようのライブラリです。charとfloatのデータを送受信できます。

Library to send multiple bytes using UART.

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?

UserRevisionLine numberNew 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 }