Skip to content

Commit 69e86c6

Browse files
committed
Add direction and make position, speed and acceleration output parameters on the constructor
1 parent b82d40d commit 69e86c6

1 file changed

Lines changed: 23 additions & 16 deletions

File tree

Inc/ST-LIB_LOW/Sensors/EncoderSensor/EncoderSensor.hpp

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,23 @@ class EncoderSensor {
2424
// across time. The SAMPLES computation rounds it down to make it even
2525
RingBuffer<uint32_t, (SAMPLES / 2) * 2> past_delta_counters{};
2626

27-
double position{0.0};
28-
double speed{0.0};
29-
double acceleration{0.0};
27+
enum Direction : uint8_t { FORWARD = 0, BACKWARDS = 1 };
28+
29+
Direction *direction;
30+
double *position;
31+
double *speed;
32+
double *acceleration;
3033

3134
public:
32-
EncoderSensor(Pin &pin1, Pin &pin2, const double counter_distance_m)
35+
EncoderSensor(Pin &pin1, Pin &pin2, const double counter_distance_m,
36+
Direction *direction, double *position, double *speed,
37+
double *acceleration)
3338
: counter_distance_m(counter_distance_m),
34-
encoder_id(Encoder::inscribe(pin1, pin2)) {
39+
encoder_id(Encoder::inscribe(pin1, pin2)),
40+
direction(direction),
41+
position(position),
42+
speed(speed),
43+
acceleration(acceleration) {
3544
for (size_t i{0}; i < SAMPLES; ++i) past_delta_counters.push(0);
3645
}
3746

@@ -53,21 +62,19 @@ class EncoderSensor {
5362
const uint32_t &previous_previous_delta_counter{
5463
past_delta_counters[past_delta_counters.size() - 1]};
5564

56-
position = delta_counter * counter_distance_m;
65+
*position = delta_counter * counter_distance_m;
5766

5867
// https://en.wikipedia.org/wiki/Finite_difference_coefficient#Backward_finite_difference
59-
speed = ((3.0 * delta_counter / 2.0) - (2.0 * previous_delta_counter) +
60-
(previous_previous_delta_counter / 2.0)) *
61-
counter_distance_m;
68+
*speed = ((3.0 * delta_counter / 2.0) - (2.0 * previous_delta_counter) +
69+
(previous_previous_delta_counter / 2.0)) *
70+
counter_distance_m;
71+
72+
*acceleration = (delta_counter - (2.0 * previous_delta_counter) +
73+
previous_previous_delta_counter) *
74+
counter_distance_m;
6275

63-
acceleration = (delta_counter - (2.0 * previous_delta_counter) +
64-
previous_previous_delta_counter) *
65-
counter_distance_m;
76+
*direction = Encoder::get_direction(encoder_id) ? FORWARD : BACKWARDS;
6677

6778
past_delta_counters.push_pop(delta_counter);
6879
}
69-
70-
double *get_position() { return &position; }
71-
double *get_speed() { return &speed; }
72-
double *get_acceleration() { return &acceleration; }
7380
};

0 commit comments

Comments
 (0)