Esp32-Mcp3008-LineSensor
Library for Espressiff ESP32 based line followers, using the MCP3008 ADC chip.
mcp3008_linesensor.h
Go to the documentation of this file.
1#pragma once
2
3#include <driver/spi_master.h>
4#include <vector>
5
6#include "mcp3008_driver.h"
7
8namespace mcp3008 {
9
11
18class LineSensor : public Driver {
19public:
29 } __attribute__((packed));
30
31 LineSensor();
32 virtual ~LineSensor();
33
40
47 const CalibrationData& getCalibration() const { return m_calibration; }
48
55 bool setCalibration(const CalibrationData& data);
56
72 float readLine(bool white_line = false, float line_threshold = 0.20f) const;
73
83 esp_err_t calibratedRead(std::vector<uint16_t>& results) const;
84
90 esp_err_t calibratedRead(uint16_t* dest) const;
91
98 uint16_t calibratedReadChannel(uint8_t channel, esp_err_t* result = nullptr) const;
99
100private:
101 LineSensor(const LineSensor&) = delete;
102
103 void calibrateResults(uint16_t* dest) const;
104 inline uint16_t calibrateValue(int chan, uint16_t val) const;
105
106 CalibrationData m_calibration;
107};
108
125 friend class LineSensor;
126
127public:
129
130 void reset();
131
139 esp_err_t record();
140
141 void save();
142
143private:
145
146 LineSensor& m_sensor;
148 uint16_t m_max[Driver::CHANNELS];
149};
150
151}; // namespace mcp3008
The MCP3008 driver.
Definition: mcp3008_driver.h:15
static constexpr int CHANNELS
Amount of channels on the chip.
Definition: mcp3008_driver.h:17
This class represents a single sensor calibration session.
Definition: mcp3008_linesensor.h:124
void save()
Store the calibrated values to the parent LineSensor.
Definition: mcp3008_linesensor.cpp:167
void reset()
Reset this calibrator to the initial state.
Definition: mcp3008_linesensor.cpp:137
~LineSensorCalibrator()
Definition: mcp3008_linesensor.cpp:134
esp_err_t record()
Record current sensor values.
Definition: mcp3008_linesensor.cpp:144
The LineSensor device, based on MCP3008 chip.
Definition: mcp3008_linesensor.h:18
uint16_t calibratedReadChannel(uint8_t channel, esp_err_t *result=nullptr) const
Same as Driver::readChannel(), but returns calibrated data.
Definition: mcp3008_linesensor.cpp:124
const CalibrationData & getCalibration() const
Get the calibration data used by linesensor, feel free to save this structure somewhere and load it a...
Definition: mcp3008_linesensor.h:47
LineSensorCalibrator startCalibration()
Start the sensor line calibration procedure.
Definition: mcp3008_linesensor.cpp:21
struct mcp3008::LineSensor::CalibrationData __attribute__((packed))
bool setCalibration(const CalibrationData &data)
Set calibration data used by the line sensor.
Definition: mcp3008_linesensor.cpp:75
esp_err_t calibratedRead(std::vector< uint16_t > &results) const
Same as Driver::read(), but returns calibrated result if possible.
Definition: mcp3008_linesensor.cpp:110
virtual ~LineSensor()
Definition: mcp3008_linesensor.cpp:18
float readLine(bool white_line=false, float line_threshold=0.20f) const
Try to determine a black line's position under the sensors.
Definition: mcp3008_linesensor.cpp:25
LineSensor()
Definition: mcp3008_linesensor.cpp:10
Definition: mcp3008_driver.cpp:8
The LineSensor's calibration data.
Definition: mcp3008_linesensor.h:26
uint16_t range[Driver::CHANNELS]
Definition: mcp3008_linesensor.h:28
uint16_t min[Driver::CHANNELS]
Definition: mcp3008_linesensor.h:27