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

Dependents:   2018NHK_gakugaku_robo 2018NHK_gaku_ver2 2019NHK_A_sensor

TFmini.cpp

Committer:
UCHITAKE
Date:
2018-08-29
Revision:
5:eeb0e5bdd8b9
Parent:
4:7622beb45675
Child:
7:81f9d1372c45

File content as of revision 5:eeb0e5bdd8b9:

#include "TFmini.h"

TFmini::TFmini(PinName serialTX, PinName serialRX) :
    RawSerial(serialTX, serialRX, TF_DEFAULT_BAUD)
{
    attach(callback(this, &TFmini::receiveByte));
    thread.start(callback(this, &TFmini::assembleLoop));
}

void TFmini::receiveByte()
{
    buf.push_back(getc());
}

void TFmini::assemble()
{
    uint16_t checksum = 0x0000;
    for(int i = 0; i < TF_SERIAL_BUFFER_SIZE - 1; i++) {
        checksum+= buf[i];
    }
    uint8_t checksum_L = (checksum) & 0x00ff;
    if(checksum_L == buf[8]) {
        distance = ((buf[3]<<8)|buf[2]);    
        if(distance > 1200) distance = 1200;
        strength = ((buf[5]<<8)|buf[4]);
    }
}

void TFmini::assembleLoop()
{
    while(true) {
        if(buf.size() > TF_SERIAL_BUFFER_SIZE) {
            if(buf[0] == TF_HEADER_FIRST_BYTE && buf[1] == TF_HEADER_SECOND_BYTE) {
                assemble();
                buf.erase(buf.begin(), buf.begin() + (TF_SERIAL_BUFFER_SIZE - 1));
            } else {
                buf.erase(buf.begin());
            }
        }
    }
}

int TFmini::getDistance()
{
    return distance;
}

int TFmini::getStrength()
{
    return strength;
}

int TFmini::getSize()
{
    return buf.size();
}