NXPCUP-libary
Library for car's control board on NXPCUP competition based on the Mbed framework.
Buttons.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 
5 #include "mbed.h"
6 
7 namespace nxpcup {
8 
9 using ButtonId = int;
10 
11 class Buttons {
12 public:
13  struct Config {
14  struct ButtonSetting {
15  uint16_t id;
16  uint16_t boundaryValue;
17  };
18 
19  PinName analogPin;
20  std::vector<ButtonSetting> buttonSettings;
21  };
22 
28  Buttons(const Config& config)
29  : m_config(config)
30  , m_analogIn(config.analogPin){};
31 
37  ButtonId getPressed() { return decode(); }
38 
46  {
47  return (buttonId = decode());
48  }
49 
56  bool isPressed(ButtonId buttonId)
57  {
58  return decode() == buttonId;
59  }
60 
66  void waitForPress(ButtonId buttonId)
67  {
68  while (!isPressed(buttonId)) {
69  wait(0.1);
70  }
71  }
72 
73 private:
79  ButtonId decode()
80  {
81  int analogValue = m_analogIn.read_u16();
82  for (const auto& button : m_config.buttonSettings) {
83  if (analogValue < button.boundaryValue) {
84  return button.id;
85  }
86  }
87  return -1;
88  }
89 
90  const Config& m_config;
91  AnalogIn m_analogIn;
92 };
93 
94 } // namespace nxpcup
ButtonId getPressed(ButtonId &buttonId)
Definition: Buttons.h:45
uint16_t boundaryValue
Definition: Buttons.h:16
int ButtonId
Definition: Buttons.h:9
Buttons(const Config &config)
Definition: Buttons.h:28
Definition: BorderDetector.h:6
bool isPressed(ButtonId buttonId)
Definition: Buttons.h:56
std::vector< ButtonSetting > buttonSettings
Definition: Buttons.h:20
ButtonId getPressed()
Definition: Buttons.h:37
uint16_t id
Definition: Buttons.h:15
PinName analogPin
Definition: Buttons.h:19
Definition: Buttons.h:11
void waitForPress(ButtonId buttonId)
Definition: Buttons.h:66
Definition: Buttons.h:13