TFmini(Micro LiDAR Module) library tested on mbedos5.x

Dependents:   2018NHK_gakugaku_robo 2018NHK_gaku_ver2 2019NHK_A_sensor

Committer:
highfieldsnj
Date:
Mon Jun 24 08:59:14 2019 +0000
Revision:
7:81f9d1372c45
Parent:
5:eeb0e5bdd8b9
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UCHITAKE 0:fe2031b62770 1 #include "TFmini.h"
UCHITAKE 0:fe2031b62770 2
UCHITAKE 0:fe2031b62770 3 TFmini::TFmini(PinName serialTX, PinName serialRX) :
UCHITAKE 4:7622beb45675 4 RawSerial(serialTX, serialRX, TF_DEFAULT_BAUD)
UCHITAKE 0:fe2031b62770 5 {
UCHITAKE 4:7622beb45675 6 attach(callback(this, &TFmini::receiveByte));
UCHITAKE 0:fe2031b62770 7 }
UCHITAKE 0:fe2031b62770 8
UCHITAKE 4:7622beb45675 9 void TFmini::receiveByte()
UCHITAKE 0:fe2031b62770 10 {
highfieldsnj 7:81f9d1372c45 11 buffer[bufferPoint % TF_SERIAL_BUFFER_SIZE] = getc();
highfieldsnj 7:81f9d1372c45 12
highfieldsnj 7:81f9d1372c45 13 if(bufferPoint != 0xff) {
highfieldsnj 7:81f9d1372c45 14 ++bufferPoint;
highfieldsnj 7:81f9d1372c45 15 } else {
highfieldsnj 7:81f9d1372c45 16 bufferPoint = (255 % TF_SERIAL_BUFFER_SIZE)+1;
highfieldsnj 7:81f9d1372c45 17 }
highfieldsnj 7:81f9d1372c45 18
highfieldsnj 7:81f9d1372c45 19 ++receivedBytes;
highfieldsnj 7:81f9d1372c45 20
highfieldsnj 7:81f9d1372c45 21 if(receivedBytes >= TF_SERIAL_BUFFER_SIZE){
highfieldsnj 7:81f9d1372c45 22 checkData();
highfieldsnj 7:81f9d1372c45 23 }
highfieldsnj 7:81f9d1372c45 24 }
highfieldsnj 7:81f9d1372c45 25 void TFmini::checkData()
highfieldsnj 7:81f9d1372c45 26 {
highfieldsnj 7:81f9d1372c45 27 for(int i = 0; i < TF_SERIAL_BUFFER_SIZE; i++) {
highfieldsnj 7:81f9d1372c45 28 if(buffer[i % TF_SERIAL_BUFFER_SIZE] == TF_HEADER_FIRST_BYTE && buffer[(i + 1) % TF_SERIAL_BUFFER_SIZE] == TF_HEADER_SECOND_BYTE) {
highfieldsnj 7:81f9d1372c45 29 uint8_t checksum = 0x00;
highfieldsnj 7:81f9d1372c45 30 for(int j = 0; j < TF_SERIAL_BUFFER_SIZE - 1; j++) {
highfieldsnj 7:81f9d1372c45 31 checksum += buffer[(i + j)% TF_SERIAL_BUFFER_SIZE];
highfieldsnj 7:81f9d1372c45 32 }
highfieldsnj 7:81f9d1372c45 33 if(checksum == buffer[(i + TF_SERIAL_BUFFER_SIZE - 1)% TF_SERIAL_BUFFER_SIZE]) {
highfieldsnj 7:81f9d1372c45 34 for(int j = 0; j < TF_SERIAL_BUFFER_SIZE - 3; j++) {
highfieldsnj 7:81f9d1372c45 35 data[j] = buffer[(i + 2 + j) % TF_SERIAL_BUFFER_SIZE];
highfieldsnj 7:81f9d1372c45 36 }
highfieldsnj 7:81f9d1372c45 37 receivedBytes = 0;
highfieldsnj 7:81f9d1372c45 38
highfieldsnj 7:81f9d1372c45 39 assemble();
highfieldsnj 7:81f9d1372c45 40 return;
highfieldsnj 7:81f9d1372c45 41 }
highfieldsnj 7:81f9d1372c45 42 }
highfieldsnj 7:81f9d1372c45 43 }
UCHITAKE 0:fe2031b62770 44 }
UCHITAKE 0:fe2031b62770 45
UCHITAKE 0:fe2031b62770 46 void TFmini::assemble()
UCHITAKE 0:fe2031b62770 47 {
highfieldsnj 7:81f9d1372c45 48 distance = (data[0] & 0xFF) | ((data[1] << 8) & 0xFF00);
highfieldsnj 7:81f9d1372c45 49 strength = (data[2] & 0xFF) | ((data[3] << 8) & 0xFF00);
highfieldsnj 7:81f9d1372c45 50 reserved = data[4];
highfieldsnj 7:81f9d1372c45 51 rawQual = data[5];
takeuchi 1:12f2bfb3577a 52 }
takeuchi 1:12f2bfb3577a 53
UCHITAKE 0:fe2031b62770 54 int TFmini::getDistance()
UCHITAKE 0:fe2031b62770 55 {
UCHITAKE 0:fe2031b62770 56 return distance;
takeuchi 1:12f2bfb3577a 57 }
UCHITAKE 3:04330e82af20 58
UCHITAKE 3:04330e82af20 59 int TFmini::getStrength()
UCHITAKE 3:04330e82af20 60 {
UCHITAKE 3:04330e82af20 61 return strength;
UCHITAKE 3:04330e82af20 62 }