mirror of
https://github.com/jdillenburg/esphome.git
synced 2026-01-08 22:40:39 -07:00
johns_esphome_devices
This commit is contained in:
107
TFmini.h
Normal file
107
TFmini.h
Normal file
@@ -0,0 +1,107 @@
|
||||
#include "esphome.h"
|
||||
using namespace esphome;
|
||||
|
||||
int uart_value[9]; // save data measured by LiDAR
|
||||
float distance;
|
||||
const int HEADER = 0x59; // frame header of data package
|
||||
int rec_debug_state = 0x01; // receive state for frame
|
||||
unsigned char check;
|
||||
|
||||
class TFminiSensor : public Component, public sensor::Sensor, public UARTDevice{
|
||||
public:
|
||||
TFminiSensor(UARTComponent *parent) : Component(), UARTDevice(parent) {}
|
||||
|
||||
float get_setup_priority() const override {
|
||||
return esphome::setup_priority::AFTER_CONNECTION;
|
||||
}
|
||||
|
||||
void setup() override {
|
||||
parent_->set_baud_rate(115200);
|
||||
// standard 9-byte output format (cm)
|
||||
// see Evernote https://share.evernote.com/note/b3d7af2b-81af-b69e-6d41-41705b77493f
|
||||
const uint8_t standard_mode[5] = {0x5A, 0x05, 0x05, 0x01, 0x65};
|
||||
for (int i = 0; i < 5; i++) {
|
||||
write(standard_mode[i]);
|
||||
}
|
||||
// set refresh rate to 100Hz (1000/0x0A = 100)
|
||||
const uint8_t rate500[6] = {0x5A, 0x06, 0x03, 0x0A, 0x00, 0x6D};
|
||||
for (int i = 0; i < 6; i++) {
|
||||
write(rate500[i]);
|
||||
}
|
||||
// save the refresh rate, must wait 1 second after this for the sensor to come back online
|
||||
const uint8_t save_setting[5] = {0x5A, 0x04, 0x11, 0x6F};
|
||||
for (int i = 0; i < 5; i++) {
|
||||
write(save_setting[i]);
|
||||
}
|
||||
flush();
|
||||
}
|
||||
|
||||
void loop() override {
|
||||
update();
|
||||
}
|
||||
|
||||
void update() {
|
||||
if (!available()) return;
|
||||
if (rec_debug_state == 0x01) {
|
||||
uart_value[0] = read();
|
||||
if (uart_value[0] == HEADER) {
|
||||
check = uart_value[0];
|
||||
rec_debug_state = 0x02;
|
||||
}
|
||||
}
|
||||
else if (rec_debug_state == 0x02) {
|
||||
uart_value[1] = read();
|
||||
if (uart_value[1] == HEADER) {
|
||||
check += uart_value[1];
|
||||
rec_debug_state = 0x03;
|
||||
}
|
||||
else {
|
||||
rec_debug_state = 0x01;
|
||||
}
|
||||
}
|
||||
else if (rec_debug_state == 0x03) {
|
||||
uart_value[2] = read();
|
||||
check += uart_value[2];
|
||||
rec_debug_state = 0x04;
|
||||
}
|
||||
else if (rec_debug_state == 0x04) {
|
||||
uart_value[3] = read();
|
||||
check += uart_value[3];
|
||||
rec_debug_state = 0x05;
|
||||
}
|
||||
else if (rec_debug_state == 0x05) {
|
||||
uart_value[4] = read();
|
||||
check += uart_value[4];
|
||||
rec_debug_state = 0x06;
|
||||
}
|
||||
else if (rec_debug_state == 0x06) {
|
||||
uart_value[5] = read();
|
||||
check += uart_value[5];
|
||||
rec_debug_state = 0x07;
|
||||
}
|
||||
else if (rec_debug_state == 0x07) {
|
||||
uart_value[6] = read();
|
||||
check += uart_value[6];
|
||||
rec_debug_state = 0x08;
|
||||
}
|
||||
else if (rec_debug_state == 0x08) {
|
||||
uart_value[7] = read();
|
||||
check += uart_value[7];
|
||||
rec_debug_state = 0x09;
|
||||
}
|
||||
else if (rec_debug_state == 0x09) {
|
||||
uart_value[8] = read();
|
||||
if (uart_value[8] == check) {
|
||||
distance = uart_value[2] + uart_value[3]*256;
|
||||
int strength = uart_value[4] + uart_value[5]*256;
|
||||
float temprature = uart_value[6] + uart_value[7] *256;
|
||||
temprature = temprature/8 - 256;
|
||||
publish_state(distance);
|
||||
//while (available()) {
|
||||
// read();
|
||||
//}
|
||||
}
|
||||
rec_debug_state = 0x01;
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user