![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
a_team_fep_rx_from_kinect_sample
Revision 0:338b7241e445, committed 2018-10-04
- Comitter:
- skouki
- Date:
- Thu Oct 04 10:54:05 2018 +0000
- Commit message:
- v1;
Changed in this revision
diff -r 000000000000 -r 338b7241e445 FEP2/FEP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FEP2/FEP.cpp Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,72 @@ +#include "FEP.h" + +FEP::FEP(PinName tx, PinName rx, uint8_t addr, int baud) : + RawSerial(tx, rx, baud) +{ + _address = addr; +} + +void FEP::startReceive(uint16_t dataSize) +{ + bufferSize = dataSize + 15; + bufferPoint = 0; + receivedBytes = 0; + buffer = new uint8_t[bufferSize]; + data = new uint8_t[dataSize]; + attach(callback(this, &FEP::receiveByte)); +} + +void FEP::getData(uint8_t data_[]) +{ + for(int i = 0; i < bufferSize - 15; i++) { + data_[i] = data[i]; + } +} + +void FEP::sendData(uint8_t data_[], uint8_t length) +{ + uint8_t checksum = 0x00; + + printf("@TBN%03d%03d", _address, length + 1); + for (int j = 0; j < length; j++) { + checksum += data_[j]; + putc(data_[j]); + } + putc(checksum); + putc('\r'); + putc('\n'); +} + +void FEP::receiveByte() +{ + buffer[bufferPoint % bufferSize] = getc(); + + if(bufferPoint != 0xff) { + ++bufferPoint; + } else { + bufferPoint = (255%bufferSize)+1; + } + + ++receivedBytes; + + if(receivedBytes >= bufferSize) checkData(); +} + +void FEP::checkData() +{ + for(int i = 0; i < bufferSize; i++) { + if(buffer[i % bufferSize] == FEP_HEADER0 && buffer[(i + 1) % bufferSize] == FEP_HEADER1 && buffer[(i + 2) % bufferSize] == FEP_HEADER2) { + uint8_t checksum = 0x00; + for(int j = 9; j < bufferSize - 6; j++) { + checksum += buffer[(i + j)% bufferSize]; + } + if(checksum == buffer[(i + bufferSize - 6)% bufferSize]) { + for(int j = 9; j < bufferSize - 6; j++) { + data[j - 9] = buffer[(i + j) % bufferSize]; + } + receivedBytes = 0; + return; + } + } + } +}
diff -r 000000000000 -r 338b7241e445 FEP2/FEP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FEP2/FEP.h Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,34 @@ +#ifndef FEP_H +#define FEP_H + +#include "mbed.h" + +#define FEP_BUFFER_SIZE 22 +#define FEP_HEADER0 'R' +#define FEP_HEADER1 'B' +#define FEP_HEADER2 'N' + +class FEP : public RawSerial +{ +public : + FEP(PinName tx, PinName rx, uint8_t addr, int baud=115200); + + void startReceive(uint16_t dataSize); + void getData(uint8_t data_[]); + void sendData(uint8_t data_[], uint8_t length); + +private : + void receiveByte(); + void checkData(); + + uint8_t *buffer; + uint8_t bufferPoint; + uint8_t receivedBytes; + + uint16_t bufferSize; + uint8_t* data; + + uint8_t _address; +}; + +#endif \ No newline at end of file
diff -r 000000000000 -r 338b7241e445 fep_kinect/fep_kinect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep_kinect/fep_kinect.cpp Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,25 @@ +#include"fep_kinect.h" + +fep_kinect::fep_kinect(PinName tx,PinName rx,uint8_t addr,int baud) : + fep_(tx,rx,addr,baud) +{ + fep_.startReceive(2); +} + + +uint16_t fep_kinect::get_distance() +{ + return data_[0]; +} + +uint16_t fep_kinect::get_mode() +{ + return data_[1]; +} +void fep_kinect::newdata() +{ + fep_.getData(data); + data_[2] = (int(data[0]) << 8) | int(data[1]); + data_[1] = data_[2] % 10; + data_[0] = data_[2] / 10; +} \ No newline at end of file
diff -r 000000000000 -r 338b7241e445 fep_kinect/fep_kinect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep_kinect/fep_kinect.h Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,20 @@ +#ifndef FEP_KINECT_H +#define FEP_KINECT_H + +#include"FEP.h" +#include"mbed.h" + +class fep_kinect +{ +public: + fep_kinect(PinName tx, PinName rx, uint8_t addr, int baud=115200); + uint16_t get_distance(void); + uint16_t get_mode(void); + void newdata(void); +private: + FEP fep_; + uint8_t data[2]; + uint16_t data_[3]; +}; + +#endif \ No newline at end of file
diff -r 000000000000 -r 338b7241e445 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,13 @@ +#include"fep_kinect.h" +#include"mbed.h" +fep_kinect fep(PC_12,PD_2,151,115200); +Serial pc(USBTX,USBRX,115200); +int main() +{ + while(true) { + fep.newdata(); + int distance = fep.get_distance(); + int mode = fep.get_mode(); + pc.printf("%d,%d\n\r",distance,mode); + } +} \ No newline at end of file
diff -r 000000000000 -r 338b7241e445 mbed-os.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Thu Oct 04 10:54:05 2018 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#c9e63f14085f5751ff5ead79a7c0382d50a813a2