Serial Wombat Arduino Library
Loading...
Searching...
No Matches
SerialWombatSimulatedQuadEnc.h
Go to the documentation of this file.
1#pragma once
3
4#include <stdint.h>
5#include "SerialWombat.h"
6
14
22{
23public:
24 SerialWombatSimulatedQuadEnc(SerialWombatChip& serialWombat0, SerialWombatChip& serialWombat1, uint8_t _pin0, uint8_t _pin1, bool openDrain, bool doubleTransition): sw0(serialWombat0), sw1(serialWombat1)
25 {
26 pin0State = true;
27 pin1State = true;
28 pin0 = _pin0;
29 pin1 = _pin1;
30 this->openDrain = openDrain;
31 this->doubleTransition = doubleTransition;
32 initialize();
33 }
34
36 {
37 pin0High();
38 pin1High();
39 }
41 {
42 if (pin0State)
43 {
44 pin0Low();
45 }
46 else
47 {
48 pin0High();
49 }
50 }
51
53 {
54 if (pin1State)
55 {
56 pin1Low();
57 }
58 else
59 {
60 pin1High();
61 }
62 }
63 void pin0High()
64 {
65 sw0.digitalWrite(pin0, HIGH);
66 pin0State = true;
67 }
68
69 void pin1High()
70 {
71 sw1.digitalWrite(pin1, HIGH);
72 pin1State = true;
73 }
74
75
76 void pin0Low()
77 {
78 sw0.digitalWrite(pin0, LOW);
79 pin0State = false;
80 }
81
82 void pin1Low()
83 {
84 sw1.digitalWrite(pin1, LOW);
85 pin1State = false;
86 }
87
88 bool service()
89 {
91 {
92 switch (state)
93 {
94 case SIMQE_IDLE:
95 {
97 {
100 {
101 togglePin0();
102 }
103 else
104 {
105 togglePin1();
106 }
107
109 }
110
111 }
112 break;
113
115 {
117 {
118 lastTransitionTime_millis = millis();
120 {
121 togglePin1();
122 if (!doubleTransition)
123 {
125 }
126 }
127 else
128 {
129 togglePin0();
130 if (!doubleTransition)
131 {
133 }
134
135 }
136
137
139 }
140
141 }
142 break;
143
145 {
147 {
149 {
150 lastTransitionTime_millis = millis();
152 {
153 togglePin0();
154 }
155 else
156 {
157 togglePin1();
158 }
159
161 }
162 else
163 {
165 }
166 }
167
168 }
169 break;
171 {
173 {
174 lastTransitionTime_millis = millis();
176 {
177 togglePin1();
179
180 }
181 else
182 {
183 togglePin0();
185
186 }
188 }
189
190 }
191 break;
192
194 {
196 {
197
199 }
200
201 }
202 break;
203 }
204 }
205 return state == SIMQE_IDLE;
206 }
208 {
209 sw0.pinMode(pin0, OUTPUT, false, openDrain);
210 sw1.pinMode(pin1, OUTPUT, false, openDrain);
211 bothPinsHigh();
212 currentPosition = 0;
213 targetPosition = 0;
215 }
216
217
218 bool doubleTransition = false;
220
221 int32_t currentPosition = 0;
222 int32_t targetPosition = 0;
227 bool openDrain = true;
229
230private:
231 bool pin0State = true;
232 bool pin1State = true;
233 SerialWombatChip& sw0;
234 SerialWombatChip& sw1;
235 uint8_t pin0;
236 uint8_t pin1;
237
238
239
240};
@ SIMQE_2ND_TRANSITION_1ST_PIN_COMPLETED
@ SIMQE_2ND_TRANSITION_2ND_PIN_COMPLETED
@ SIMQE_1ST_TRANSITION_1ST_PIN_COMPLETED
@ SIMQE_1ST_TRANSITION_2ND_PIN_COMPLETED
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
SerialWombatSimulatedQuadEnc(SerialWombatChip &serialWombat0, SerialWombatChip &serialWombat1, uint8_t _pin0, uint8_t _pin1, bool openDrain, bool doubleTransition)