NXPCUP-libary
Library for car's control board on NXPCUP competition based on the Mbed framework.
Encoder.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "mbed.h"
4 
5 namespace nxpcup {
6 
7 class Encoder {
8 public:
9  struct Config {
10  PinName pin;
11  int pulsePerRevolution = 400;
12  float gearRatio = 78 / 36.0;
13  int wheelCircumference = 204;
14  };
15 
21  Encoder(Config config)
22  : m_config(config)
23  , m_interrupt(config.pin)
24  {
25  m_interrupt.rise(callback(this, &Encoder::increment));
26 
27  // set the PullUp for the encoder pin
28  DigitalIn inputPin(config.pin);
29  inputPin.mode(PullUp);
30  }
31 
38  float update(uint16_t timeSinceLastCallUs)
39  {
40  m_speed = (1000.0 * m_config.wheelCircumference * m_count) / (m_config.pulsePerRevolution * m_config.gearRatio * timeSinceLastCallUs);
41  m_distanceCount += m_count;
42  m_count = 0;
43 
44  return m_speed;
45  }
46 
52  float speed() const { return m_speed; }
53 
59  float distance() const
60  {
61  float encoderParams = m_config.pulsePerRevolution * m_config.gearRatio * 1000 /* mm => meters */;
62  return static_cast<float>(m_config.wheelCircumference * m_distanceCount) / (encoderParams);
63  }
64 
69  {
70  m_distanceCount = 0;
71  }
72 
73 private:
77  void increment() { m_count++; }
78 
79  Config m_config;
80  InterruptIn m_interrupt;
81  volatile uint16_t m_count = 0;
82  float m_speed = 0;
83  long m_distanceCount = 0;
84 };
85 
86 } // namespace nxpcup
float speed() const
Definition: Encoder.h:52
float update(uint16_t timeSinceLastCallUs)
Definition: Encoder.h:38
float gearRatio
Definition: Encoder.h:12
Definition: Encoder.h:9
Definition: BorderDetector.h:6
int wheelCircumference
Definition: Encoder.h:13
PinName pin
Definition: Encoder.h:10
int pulsePerRevolution
Definition: Encoder.h:11
Encoder(Config config)
Definition: Encoder.h:21
Definition: Encoder.h:7
float distance() const
Definition: Encoder.h:59
void resetDistance()
Definition: Encoder.h:68