Roboid Control for C++ 0.4
Loading...
Searching...
No Matches
DigitalInput.h
1#pragma once
2
3#include "Things/RelativeEncoder.h"
4#include "Things/TouchSensor.h"
5
6namespace RoboidControl {
7namespace Arduino {
8
10class DigitalInput : public Thing {
11 public:
15 //DigitalInput(Participant* participant, unsigned char pin);
16 // DigitalInput(Thing* parent, unsigned char pin);
17 DigitalInput(unsigned char pin, Thing* parent);
18
19 bool isHigh = false;
20 bool isLow = false;
21
23 virtual void Update(bool recursive = false) override;
24
25 protected:
27 unsigned char pin = 0;
28
29 public:
30 class TouchSensor;
31 class RelativeEncoder;
32};
33
34#pragma region Touch sensor
35
36class DigitalInput::TouchSensor : public RoboidControl::TouchSensor {
37 public:
38 TouchSensor(unsigned char pin, Thing* parent);
39
41 virtual void Update(bool recurse = false) override;
42
43 protected:
44 DigitalInput digitalInput;
45};
46
47#pragma endregion Touch sensor
48
49#pragma region Incremental encoder
50
51class DigitalInput::RelativeEncoder : public RoboidControl::RelativeEncoder {
52 public:
53 struct Configuration {
54 unsigned char pin;
55 unsigned char pulsesPerRevolution;
56 };
57
58 RelativeEncoder(Configuration config, Thing* parent = Thing::LocalRoot());
59
60 unsigned char pulsesPerRevolution;
61
63 float pulseFrequency = 0;
64
66 virtual void Update(bool recurse = false) override;
67
68 protected:
69 DigitalInput digitalInput;
70
71 int interruptIx = 0;
72
73 static int interruptCount;
74
75 volatile static int pulseCount0;
76 static void PulseInterrupt0();
77
78 volatile static int pulseCount1;
79 static void PulseInterrupt1();
80
81 int GetPulseCount();
82 long netPulseCount = 0;
83 unsigned long lastUpdateTime = 0;
84
85 private:
86 void Start();
87};
88
89#pragma endregion Incremental encoder
90
91} // namespace Arduino
92} // namespace RoboidControl
A digital input represents the stat of a digital GPIO pin.
Definition DigitalInput.h:10
unsigned char pin
The pin used for digital input.
Definition DigitalInput.h:27
virtual void Update(bool recursive=false) override
Definition DigitalInput.cpp:18
An Incremental Encoder measures the rotations of an axle using a rotary sensor. Some encoders are abl...
Definition RelativeEncoder.h:10
A thing is the primitive building block.
Definition Thing.h:20
static Thing * LocalRoot()
The root thing for the local participant.
Definition Thing.cpp:23
A sensor which can detect touches.
Definition TouchSensor.h:8