TI RSLK Library 0.2.2
Loading...
Searching...
No Matches
QTRSensors.h
Go to the documentation of this file.
1
2
3#pragma once
4
5#include <stdint.h>
6
13enum class QTRReadMode : uint8_t
14{
17 Off,
18
21 On,
22
29
35 OddEven,
36
42
47 Manual
48};
49
51enum class QTRType : uint8_t
52{
53 Undefined,
54 RC,
55 Analog
56};
57
59enum class QTREmitters : uint8_t
60{
61 All,
62 Odd,
63 Even,
64 None
65};
66
68const uint8_t QTRNoEmitterPin = 255;
69
71const uint16_t QTRRCDefaultTimeout = 2500;
72
74const uint8_t QTRMaxSensors = 31;
75
85{
86public:
87 QTRSensors() = default;
88
90
94 void setTypeRC();
95
102 void setTypeAnalog(uint16_t maxVal = 1023);
103
109 QTRType getType() { return _type; }
110
137 void setSensorPins(const uint8_t *pins, uint8_t sensorCount);
138
157 void setTimeout(uint16_t timeout);
158
164 uint16_t getTimeout() { return _timeout; }
165
175 void setSamplesPerSensor(uint8_t samples);
176
183 uint16_t getSamplesPerSensor() { return _samplesPerSensor; }
184
204 void setEmitterPin(uint8_t emitterPin);
205
221 void setEmitterPins(uint8_t oddEmitterPin, uint8_t evenEmitterPin);
222
230 void releaseEmitterPins();
231
238 uint8_t getEmitterPinCount() { return _emitterPinCount; }
239
250 uint8_t getEmitterPin() { return _oddEmitterPin; }
251
262 uint8_t getOddEmitterPin() { return _oddEmitterPin; }
263
274 uint8_t getEvenEmitterPin() { return _evenEmitterPin; }
275
283 void setDimmable() { _dimmable = true; }
284
292 void setNonDimmable() { _dimmable = false; }
293
300 bool getDimmable() { return _dimmable; }
301
318 void setDimmingLevel(uint8_t dimmingLevel);
319
325 uint8_t getDimmingLevel() { return _dimmingLevel; }
326
341 void emittersOff(QTREmitters emitters = QTREmitters::All, bool wait = true);
342
360 void emittersOn(QTREmitters emitters = QTREmitters::All, bool wait = true);
361
375 void emittersSelect(QTREmitters emitters);
376
402
404 void resetCalibration();
405
433 void read(uint16_t *sensorValues, QTRReadMode mode = QTRReadMode::On);
434
453 void readCalibrated(uint16_t *sensorValues, QTRReadMode mode = QTRReadMode::On);
454
496 uint16_t readLineBlack(uint16_t *sensorValues, QTRReadMode mode = QTRReadMode::On)
497 {
498 return readLinePrivate(sensorValues, mode, false);
499 }
500
519 uint16_t readLineWhite(uint16_t *sensorValues, QTRReadMode mode = QTRReadMode::On)
520 {
521 return readLinePrivate(sensorValues, mode, true);
522 }
523
528 {
530 bool initialized = false;
532 uint16_t *minimum = nullptr;
534 uint16_t *maximum = nullptr;
535 };
536
545
548
551
553
554private:
555 uint16_t emittersOnWithPin(uint8_t pin);
556
557 // Handles the actual calibration, including (re)allocating and
558 // initializing the storage for the calibration values if necessary.
559 void calibrateOnOrOff(CalibrationData &calibration, QTRReadMode mode);
560
561 void readPrivate(uint16_t *sensorValues, uint8_t start = 0, uint8_t step = 1);
562
563 uint16_t readLinePrivate(uint16_t *sensorValues, QTRReadMode mode, bool invertReadings);
564
565 QTRType _type = QTRType::Undefined;
566
567 uint8_t *_sensorPins = nullptr;
568 uint8_t _sensorCount = 0;
569
570 uint16_t _timeout = QTRRCDefaultTimeout; // only used for RC sensors
571 uint16_t _maxValue = QTRRCDefaultTimeout; // the maximum value returned by readPrivate()
572 uint8_t _samplesPerSensor = 4; // only used for analog sensors
573
574 uint8_t _oddEmitterPin = QTRNoEmitterPin; // also used for single emitter pin
575 uint8_t _evenEmitterPin = QTRNoEmitterPin;
576 uint8_t _emitterPinCount = 0;
577
578 bool _dimmable = true;
579 uint8_t _dimmingLevel = 0;
580
581 uint16_t _lastPosition = 0;
582};
const uint8_t QTRNoEmitterPin
Represents an undefined emitter control pin.
Definition QTRSensors.h:68
QTRReadMode
Emitter behavior when taking readings.
Definition QTRSensors.h:14
QTRType
Sensor types.
Definition QTRSensors.h:52
const uint16_t QTRRCDefaultTimeout
Default timeout for RC sensors (in microseconds).
Definition QTRSensors.h:71
QTREmitters
Emitters selected to turn on or off.
Definition QTRSensors.h:60
const uint8_t QTRMaxSensors
The maximum number of sensors supported by an instance of this class.
Definition QTRSensors.h:74
Represents a QTR sensor array.
Definition QTRSensors.h:85
void calibrate(QTRReadMode mode=QTRReadMode::On)
Reads the sensors for calibration.
QTRType getType()
Returns the type of the sensors.
Definition QTRSensors.h:109
uint16_t readLineWhite(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the sensors, provides calibrated values, and returns an estimated white line position.
Definition QTRSensors.h:519
uint8_t getOddEmitterPin()
Returns the odd emitter control pin.
Definition QTRSensors.h:262
uint8_t getEvenEmitterPin()
Returns the even emitter control pin.
Definition QTRSensors.h:274
uint8_t getEmitterPinCount()
Returns the number of emitter control pins in use.
Definition QTRSensors.h:238
void setDimmingLevel(uint8_t dimmingLevel)
Sets the dimming level.
void setTypeRC()
Specifies that the sensors are RC.
Definition QTRSensors.cpp:4
void setEmitterPin(uint8_t emitterPin)
Sets the emitter control pin for the sensors.
uint16_t getSamplesPerSensor()
Returns the number of analog readings to average per analog sensor.
Definition QTRSensors.h:183
void setEmitterPins(uint8_t oddEmitterPin, uint8_t evenEmitterPin)
Sets separate odd and even emitter control pins for the sensors.
void setSamplesPerSensor(uint8_t samples)
Sets the number of analog readings to average per analog sensor.
void setDimmable()
Specifies that the sensors are dimmable.
Definition QTRSensors.h:283
void setNonDimmable()
Specifies that the sensors are non-dimmable.
Definition QTRSensors.h:292
void setTypeAnalog(uint16_t maxVal=1023)
Specifies that the sensor type is analog.
void emittersOn(QTREmitters emitters=QTREmitters::All, bool wait=true)
Turns the IR LEDs on.
void emittersOff(QTREmitters emitters=QTREmitters::All, bool wait=true)
Turns the IR LEDs off.
CalibrationData calibrationOff
Data from calibrating with emitters off.
Definition QTRSensors.h:550
uint16_t readLineBlack(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the sensors, provides calibrated values, and returns an estimated black line position.
Definition QTRSensors.h:496
void read(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the raw sensor values into an array.
uint16_t getTimeout()
Returns the timeout for RC sensors.
Definition QTRSensors.h:164
void readCalibrated(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the sensors and provides calibrated values between 0 and 1000.
uint8_t getEmitterPin()
Returns the emitter control pin.
Definition QTRSensors.h:250
void resetCalibration()
Resets all calibration that has been done.
uint8_t getDimmingLevel()
Returns the dimming level.
Definition QTRSensors.h:325
void setTimeout(uint16_t timeout)
Sets the timeout for RC sensors.
bool getDimmable()
Returns whether the sensors are dimmable.
Definition QTRSensors.h:300
void emittersSelect(QTREmitters emitters)
Turns on the selected emitters and turns off the other emitters with optimized timing.
CalibrationData calibrationOn
Data from calibrating with emitters on.
Definition QTRSensors.h:547
void releaseEmitterPins()
Releases emitter pin/pins that have been set.
void setSensorPins(const uint8_t *pins, uint8_t sensorCount)
Sets the sensor pins.
Stores sensor calibration data.
Definition QTRSensors.h:528
uint16_t * minimum
Lowest readings seen during calibration.
Definition QTRSensors.h:532
uint16_t * maximum
Highest readings seen during calibration.
Definition QTRSensors.h:534
bool initialized
Whether array pointers have been allocated and initialized.
Definition QTRSensors.h:530