| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include "tlv_sensor.h"
- static const float ALPHA = 1;
- TlvSensor::TlvSensor() {}
- void TlvSensor::init(TwoWire* wire, bool invert) {
- wire_ = wire;
- invert_ = invert;
- tlv_.begin(*wire);
- tlv_.setAccessMode(Tlv493d::AccessMode_e::MASTERCONTROLLEDMODE);
- tlv_.disableInterrupt();
- tlv_.disableTemp();
- }
- float TlvSensor::getSensorAngle() {
- uint32_t now = micros();
- if (now - last_update_ > 50) {
- tlv_.updateData();
- frame_counts_[cur_frame_count_index_] = tlv_.getExpectedFrameCount();
- cur_frame_count_index_++;
- if (cur_frame_count_index_ >= sizeof(frame_counts_)) {
- cur_frame_count_index_ = 0;
- }
- x_ = tlv_.getX() * ALPHA + x_ * (1-ALPHA);
- y_ = tlv_.getY() * ALPHA + y_ * (1-ALPHA);
- last_update_ = now;
- bool all_same = true;
- uint8_t match_frame = frame_counts_[0];
- for (uint8_t i = 1; i < sizeof(frame_counts_); i++) {
- if (frame_counts_[i] != match_frame) {
- all_same = false;
- break;
- }
- }
- if (all_same) {
- Serial.println("LOCKED!");
- init(wire_, invert_);
- // Force unique frame counts to avoid reset loop
- for (uint8_t i = 1; i < sizeof(frame_counts_); i++) {
- frame_counts_[i] = i;
- }
- }
- }
- float rad = (invert_ ? -1 : 1) * atan2f(y_, x_);
- if (rad < 0) {
- rad += 2*PI;
- }
- return rad;
- }
|