Smartcar Shield
GP2Y0A21.cpp
Go to the documentation of this file.
1 #include "GP2Y0A21.hpp"
2 
3 namespace
4 {
5 const auto kMinDistance = 12; // GP2Y0A21's minimum distance
6 const auto kMaxDistance = 78; // GP2Y0A21's maximum distance
7 } // namespace
8 
9 GP2Y0A21::GP2Y0A21(Runtime& runtime, uint8_t pin)
10  : InfraredAnalogSensor(runtime)
11  , kPin{ pin }
12  , mRuntime(runtime)
13 {
14 }
15 
16 unsigned int GP2Y0A21::getDistance()
17 {
18  auto analogReading = mRuntime.getAnalogPinState(kPin);
19  // Formula source: Jeroen Doggen http://plat.is/v3x25
20  // It's OK to surpress this clang-tidy warning since this is part of a magic (!) formula
21  // NOLINTNEXTLINE(readability-magic-numbers)
22  auto result = static_cast<unsigned int>(1 / (0.0002391473 * analogReading - 0.0100251467));
23 
24  return (result >= kMinDistance) && (result <= kMaxDistance) ? result : 0;
25 }
GP2Y0A21::GP2Y0A21
GP2Y0A21(Runtime &runtime, uint8_t pin)
Constructs a GP2Y0A21 sensor.
Definition: GP2Y0A21.cpp:9
Runtime
Definition: Runtime.hpp:35
InfraredAnalogSensor
Definition: InfraredAnalogSensor.hpp:25
GP2Y0A21.hpp
GP2Y0A21::getDistance
unsigned int getDistance() override
Gets the distance measured by the sensor in centimeters.
Definition: GP2Y0A21.cpp:16
Runtime::getAnalogPinState
virtual int getAnalogPinState(uint8_t pin)=0
Get pin's analog (ADC) reading, equivalent of analogRead in Arduino.