32enum class Direction :
unsigned char {
37constexpr int NUM_DIRECTIONS = 2;
38using Direction_t =
enum Direction;
40enum class Carriage :
unsigned char {
46constexpr int NUM_CARRIAGES = 3;
47using Carriage_t =
enum Carriage;
49enum class MachineType :
unsigned char {
55constexpr int NUM_MACHINES = 3;
56using Machine_t =
enum MachineType;
58enum class BeltShift :
unsigned char { Unknown, Regular, Shifted, Lace_Regular, Lace_Shifted };
59using BeltShift_t =
enum BeltShift;
63constexpr uint8_t NUM_NEEDLES[NUM_MACHINES] = {200U, 200U, 112U};
64constexpr uint8_t LINE_BUFFER_LEN[NUM_MACHINES] = {25U, 25U, 14U};
65constexpr uint8_t END_OF_LINE_OFFSET_L[NUM_MACHINES] = {12U, 12U, 6U};
66constexpr uint8_t END_OF_LINE_OFFSET_R[NUM_MACHINES] = {12U, 12U, 6U};
68constexpr uint8_t END_LEFT[NUM_MACHINES] = {0U, 0U, 0U};
69constexpr uint8_t END_RIGHT[NUM_MACHINES] = {255U, 255U, 167U};
70constexpr uint8_t END_OFFSET[NUM_MACHINES] = {28U, 28U, 28U};
74constexpr uint8_t END_LEFT_PLUS_OFFSET[NUM_MACHINES] = {28U, 28U, 28U};
75constexpr uint8_t END_RIGHT_MINUS_OFFSET[NUM_MACHINES] = {227U, 227U, 139U};
77constexpr uint8_t ALL_MAGNETS_CLEARED_LEFT[NUM_MACHINES] = {56U, 56U, 38U};
78constexpr uint8_t ALL_MAGNETS_CLEARED_RIGHT[NUM_MACHINES] = {199U, 199U, 129U};
83constexpr uint8_t GARTER_SLOP = 2U;
87constexpr uint8_t GARTER_L_MAGNET_SPACING = 24U;
89constexpr uint8_t START_OFFSET[NUM_MACHINES][NUM_DIRECTIONS][NUM_CARRIAGES] = {
113constexpr uint16_t FILTER_L_MIN[NUM_MACHINES] = { 200U, 200U, 200U};
114constexpr uint16_t FILTER_L_MAX[NUM_MACHINES] = { 600U, 600U, 600U};
115constexpr uint16_t FILTER_R_MIN[NUM_MACHINES] = { 200U, 200U, 200U};
116constexpr uint16_t FILTER_R_MAX[NUM_MACHINES] = {1023U, 600U, 600U};
118constexpr uint16_t SOLENOIDS_BITMASK = 0xFFFFU;
130 virtual void encA_interrupt() = 0;
131 virtual uint16_t getHallValue(Direction_t pSensor) = 0;
132 virtual void init(Machine_t machineType) = 0;
133 virtual Machine_t getMachineType() = 0;
134 virtual BeltShift_t getBeltShift() = 0;
135 virtual Carriage_t getCarriage() = 0;
136 virtual Direction_t getDirection() = 0;
137 virtual Direction_t getHallActive() = 0;
138 virtual uint8_t getPosition() = 0;
155 static void encA_interrupt();
156 static uint16_t getHallValue(Direction_t pSensor);
157 static void init(Machine_t machineType);
158 static Machine_t getMachineType();
159 static BeltShift_t getBeltShift();
160 static Carriage_t getCarriage();
161 static Direction_t getDirection();
162 static Direction_t getHallActive();
163 static uint8_t getPosition();
172 void init(Machine_t machineType)
final;
181 Machine_t m_machineType;
183 volatile BeltShift_t m_beltShift;
184 volatile Carriage_t m_carriage;
185 volatile Carriage_t m_previousDetectedCarriageLeft;
186 volatile Carriage_t m_previousDetectedCarriageRight;
187 volatile Direction_t m_direction;
188 volatile Direction_t m_hallActive;
189 volatile uint8_t m_position;
190 volatile bool m_oldState;
191 volatile bool m_passedLeft;
192 volatile bool m_passedRight;
194 Carriage_t detectCarriageLeft();
195 Carriage_t detectCarriageRight();
Definition encoders.h:166
void init(Machine_t machineType) final
Initialize machine type.
Definition encoders.cpp:70
void encA_rising()
Interrupt service subroutine.
Definition encoders.cpp:164
BeltShift_t getBeltShift() final
Get beltShift member.
Definition encoders.cpp:94
uint16_t getHallValue(Direction_t pSensor) final
Read hall sensor on left and right.
Definition encoders.cpp:55
Direction_t getHallActive() final
Get hallActive member.
Definition encoders.cpp:108
Direction_t getDirection() final
Get direction member.
Definition encoders.cpp:101
Carriage_t getCarriage() final
Get carriage member.
Definition encoders.cpp:115
void encA_interrupt() final
Service encoder A interrupt routine.
Definition encoders.cpp:38
Machine_t getMachineType() final
Get machine type.
Definition encoders.cpp:122
void encA_falling()
Interrupt service subroutine.
Definition encoders.cpp:255
uint8_t getPosition() final
Get position member.
Definition encoders.cpp:87
Encoder interface.
Definition encoders.h:125
Definition encoders.h:146