TI RSLK Library  0.2.0
QTRSensors.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <stdint.h>
6 
13 enum class QTRReadMode : uint8_t {
16  Off,
17 
20  On,
21 
27  OnAndOff,
28 
34  OddEven,
35 
41 
46  Manual
47 };
48 
50 enum class QTRType : uint8_t {
51  Undefined,
52  RC,
53  Analog
54 };
55 
57 enum class QTREmitters : uint8_t {
58  All,
59  Odd,
60  Even,
61  None
62 };
63 
65 const uint8_t QTRNoEmitterPin = 255;
66 
68 const uint16_t QTRRCDefaultTimeout = 2500;
69 
71 const uint8_t QTRMaxSensors = 31;
72 
82 {
83  public:
84 
85  QTRSensors() = default;
86 
87  ~QTRSensors();
88 
92  void setTypeRC();
93 
100  void setTypeAnalog(uint16_t maxVal = 1023);
101 
107  QTRType getType() { return _type; }
108 
135  void setSensorPins(const uint8_t * pins, uint8_t sensorCount);
136 
155  void setTimeout(uint16_t timeout);
156 
162  uint16_t getTimeout() { return _timeout; }
163 
173  void setSamplesPerSensor(uint8_t samples);
174 
181  uint16_t getSamplesPerSensor() { return _samplesPerSensor; }
182 
202  void setEmitterPin(uint8_t emitterPin);
203 
219  void setEmitterPins(uint8_t oddEmitterPin, uint8_t evenEmitterPin);
220 
228  void releaseEmitterPins();
229 
236  uint8_t getEmitterPinCount() { return _emitterPinCount; }
237 
248  uint8_t getEmitterPin() { return _oddEmitterPin; }
249 
260  uint8_t getOddEmitterPin() { return _oddEmitterPin; }
261 
272  uint8_t getEvenEmitterPin() { return _evenEmitterPin; }
273 
281  void setDimmable() { _dimmable = true; }
282 
290  void setNonDimmable() { _dimmable = false; }
291 
298  bool getDimmable() { return _dimmable; }
299 
316  void setDimmingLevel(uint8_t dimmingLevel);
317 
323  uint8_t getDimmingLevel() { return _dimmingLevel; }
324 
339  void emittersOff(QTREmitters emitters = QTREmitters::All, bool wait = true);
340 
358  void emittersOn(QTREmitters emitters = QTREmitters::All, bool wait = true);
359 
373  void emittersSelect(QTREmitters emitters);
374 
400 
402  void resetCalibration();
403 
431  void read(uint16_t * sensorValues, QTRReadMode mode = QTRReadMode::On);
432 
451  void readCalibrated(uint16_t * sensorValues, QTRReadMode mode = QTRReadMode::On);
452 
494  uint16_t readLineBlack(uint16_t * sensorValues, QTRReadMode mode = QTRReadMode::On)
495  {
496  return readLinePrivate(sensorValues, mode, false);
497  }
498 
517  uint16_t readLineWhite(uint16_t * sensorValues, QTRReadMode mode = QTRReadMode::On)
518  {
519  return readLinePrivate(sensorValues, mode, true);
520  }
521 
522 
527  {
529  bool initialized = false;
531  uint16_t * minimum = nullptr;
533  uint16_t * maximum = nullptr;
534  };
535 
544 
547 
550 
552 
553  private:
554 
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 };
QTRReadMode::OddEvenAndOff
QTRSensors::setNonDimmable
void setNonDimmable()
Specifies that the sensors are non-dimmable.
Definition: QTRSensors.h:290
QTRReadMode::OnAndOff
QTRSensors
Represents a QTR sensor array.
Definition: QTRSensors.h:81
QTRSensors::emittersOff
void emittersOff(QTREmitters emitters=QTREmitters::All, bool wait=true)
Turns the IR LEDs off.
Definition: QTRSensors.cpp:102
QTRSensors::setEmitterPins
void setEmitterPins(uint8_t oddEmitterPin, uint8_t evenEmitterPin)
Sets separate odd and even emitter control pins for the sensors.
Definition: QTRSensors.cpp:66
QTRSensors::getEvenEmitterPin
uint8_t getEvenEmitterPin()
Returns the even emitter control pin.
Definition: QTRSensors.h:272
QTRSensors::emittersSelect
void emittersSelect(QTREmitters emitters)
Turns on the selected emitters and turns off the other emitters with optimized timing.
Definition: QTRSensors.cpp:247
QTRSensors::readCalibrated
void readCalibrated(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the sensors and provides calibrated values between 0 and 1000.
Definition: QTRSensors.cpp:467
QTRSensors::getEmitterPinCount
uint8_t getEmitterPinCount()
Returns the number of emitter control pins in use.
Definition: QTRSensors.h:236
QTRSensors::getSamplesPerSensor
uint16_t getSamplesPerSensor()
Returns the number of analog readings to average per analog sensor.
Definition: QTRSensors.h:181
QTRSensors::CalibrationData::maximum
uint16_t * maximum
Highest readings seen during calibration.
Definition: QTRSensors.h:533
QTRSensors::setEmitterPin
void setEmitterPin(uint8_t emitterPin)
Sets the emitter control pin for the sensors.
Definition: QTRSensors.cpp:56
QTRSensors::releaseEmitterPins
void releaseEmitterPins()
Releases emitter pin/pins that have been set.
Definition: QTRSensors.cpp:78
QTRSensors::getEmitterPin
uint8_t getEmitterPin()
Returns the emitter control pin.
Definition: QTRSensors.h:248
QTRSensors::setSamplesPerSensor
void setSamplesPerSensor(uint8_t samples)
Sets the number of analog readings to average per analog sensor.
Definition: QTRSensors.cpp:50
QTRSensors::setSensorPins
void setSensorPins(const uint8_t *pins, uint8_t sensorCount)
Sets the sensor pins.
Definition: QTRSensors.cpp:16
QTRNoEmitterPin
const uint8_t QTRNoEmitterPin
Represents an undefined emitter control pin.
Definition: QTRSensors.h:65
QTRSensors::setTypeRC
void setTypeRC()
Specifies that the sensors are RC.
Definition: QTRSensors.cpp:4
QTRSensors::setDimmable
void setDimmable()
Specifies that the sensors are dimmable.
Definition: QTRSensors.h:281
QTRSensors::resetCalibration
void resetCalibration()
Resets all calibration that has been done.
Definition: QTRSensors.cpp:293
QTRSensors::getTimeout
uint16_t getTimeout()
Returns the timeout for RC sensors.
Definition: QTRSensors.h:162
QTRSensors::calibrationOn
CalibrationData calibrationOn
Data from calibrating with emitters on.
Definition: QTRSensors.h:546
QTRReadMode::Off
QTRSensors::calibrationOff
CalibrationData calibrationOff
Data from calibrating with emitters off.
Definition: QTRSensors.h:549
QTRSensors::CalibrationData
Stores sensor calibration data.
Definition: QTRSensors.h:526
QTRSensors::getDimmingLevel
uint8_t getDimmingLevel()
Returns the dimming level.
Definition: QTRSensors.h:323
QTRReadMode::On
QTRSensors::getDimmable
bool getDimmable()
Returns whether the sensors are dimmable.
Definition: QTRSensors.h:298
QTRSensors::calibrate
void calibrate(QTRReadMode mode=QTRReadMode::On)
Reads the sensors for calibration.
Definition: QTRSensors.cpp:304
QTRReadMode
QTRReadMode
Emitter behavior when taking readings.
Definition: QTRSensors.h:13
QTRSensors::readLineWhite
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:517
QTREmitters
QTREmitters
Emitters selected to turn on or off.
Definition: QTRSensors.h:57
QTRSensors::emittersOn
void emittersOn(QTREmitters emitters=QTREmitters::All, bool wait=true)
Turns the IR LEDs on.
Definition: QTRSensors.cpp:151
QTRSensors::getOddEmitterPin
uint8_t getOddEmitterPin()
Returns the odd emitter control pin.
Definition: QTRSensors.h:260
QTRSensors::setTypeAnalog
void setTypeAnalog(uint16_t maxVal=1023)
Specifies that the sensor type is analog.
Definition: QTRSensors.cpp:10
QTRMaxSensors
const uint8_t QTRMaxSensors
The maximum number of sensors supported by an instance of this class.
Definition: QTRSensors.h:71
QTRSensors::read
void read(uint16_t *sensorValues, QTRReadMode mode=QTRReadMode::On)
Reads the raw sensor values into an array.
Definition: QTRSensors.cpp:407
QTRSensors::CalibrationData::initialized
bool initialized
Whether array pointers have been allocated and initialized.
Definition: QTRSensors.h:529
QTRRCDefaultTimeout
const uint16_t QTRRCDefaultTimeout
Default timeout for RC sensors (in microseconds).
Definition: QTRSensors.h:68
QTRType
QTRType
Sensor types.
Definition: QTRSensors.h:50
QTRSensors::getType
QTRType getType()
Returns the type of the sensors.
Definition: QTRSensors.h:107
QTRSensors::CalibrationData::minimum
uint16_t * minimum
Lowest readings seen during calibration.
Definition: QTRSensors.h:531
QTRReadMode::Manual
QTRReadMode::OddEven
QTRSensors::readLineBlack
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:494
QTRSensors::setDimmingLevel
void setDimmingLevel(uint8_t dimmingLevel)
Sets the dimming level.
Definition: QTRSensors.cpp:95
QTRSensors::setTimeout
void setTimeout(uint16_t timeout)
Sets the timeout for RC sensors.
Definition: QTRSensors.cpp:43