TFmini(Micro LiDAR Module) library tested on mbedos5.x
Dependents: 2018NHK_gakugaku_robo 2018NHK_gaku_ver2 2019NHK_A_sensor
TFmini.cpp@7:81f9d1372c45, 2019-06-24 (annotated)
- Committer:
- highfieldsnj
- Date:
- Mon Jun 24 08:59:14 2019 +0000
- Revision:
- 7:81f9d1372c45
- Parent:
- 5:eeb0e5bdd8b9
fix
Who changed what in which revision?
User | Revision | Line number | New 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 | } |