/** * @file calcAzimuth.h * @author Alexander Klein (alex@kleiax.de) * @brief * @version 0.1 * @date 2023-09-03 * * @copyright Copyright (c) 2023 * */ #ifndef CALC_AZIMUTH_H #define CALC_AZIMUTH_H #include "component.h" #include "point.h" class CalcAzimuth : public Component { public: enum State { Invalid, Bad, Ok, Good, Super }; CalcAzimuth(Point point); void drivingDirectionChange(Point point); void updateCurrentPosition(Point point); void disableCalcAzimuth() { this->directionChangeMode = false; } int16_t getAzimuth() const { return this->calcAzimuth; } State getState() const { return this->state; } static String stateToString(State state); private: void run() override; void updateAzimuth(); State state = State::Invalid; Point lastChangePoint; Point currentPosition; bool positionChanged = false; bool directionChangeMode = false; int16_t calcAzimuth = INT16_MAX; double minDistanceForBetterQuality = 2; static constexpr uint8_t loopDelay = 50; }; #endif // CALC_AZIMUTH_H