Aruna
Stepper.h
Go to the documentation of this file.
1 //
2 // Created by noeel on 04-02-20.
3 //
4 
5 #ifndef ARUNA_STEPPER_H
6 #define ARUNA_STEPPER_H
7 
8 #include <stdint.h>
10 #include "aruna/log.h"
11 #include "freertos/FreeRTOS.h"
12 #include <freertos/task.h>
13 #include <freertos/semphr.h>
14 
15 namespace aruna {
16  namespace driver {
17 
18  class Stepper : public movement::Actuator {
19  private:
20  SemaphoreHandle_t asked_set_mutex = NULL;
21  uint16_t asked_speed;
23  size_t active_pin_index = 0;
24  TaskHandle_t timer_task_handle;
25  const uint8_t* pins;
26  const size_t pins_count = 0;
27  const bool active_high;
29 
34  err_t init_pins();
35 
40  err_t clear_pins();
41 
47  virtual err_t init_pin(uint8_t pin_nr) = 0;
48 
55  virtual err_t set_pin(uint8_t pin_nr, bool value) = 0;
56 
62  virtual err_t clear_pin(uint8_t pin_nr) {
63  return err_t::OK;
64  }
65 
72 
79  uint8_t get_pin(movement::axis_mask_t direction, uint8_t n = 0);
80 
84  void timer_task();
89  static void _timer_task_wrapper(void* _this);
90 
91  err_t _set(movement::axis_mask_t axisMask, int16_t speed) override;
92 
93  public:
101  Stepper(uint8_t *pins, size_t pins_count, movement::axis_mask_t axis, bool active_high);
102 
107  void set_speed(int16_t speed);
108 
113  void do_steps(int32_t steps);
114 
118  ~Stepper();
119 
120 
121 
122  };
123  }
124 }
125 #endif //ARUNA_STEPPER_H
Definition: comm.cpp:14
static void _timer_task_wrapper(void *_this)
wrapper for timer_task(), as FreeRTOS only wants to create tasks from static functions ...
Definition: Stepper.cpp:101
void timer_task()
task to set the next phase on time.
Definition: Stepper.cpp:64
const uint8_t * pins
Definition: Stepper.h:25
Stepper(uint8_t *pins, size_t pins_count, movement::axis_mask_t axis, bool active_high)
Stepper motor.
Definition: Stepper.cpp:28
virtual err_t init_pin(uint8_t pin_nr)=0
init single pin as output
size_t active_pin_index
Definition: Stepper.h:23
TaskHandle_t timer_task_handle
Definition: Stepper.h:24
err_t clear_pins()
reset the pins back to initial state (run when program is finished)
Definition: Stepper.cpp:117
~Stepper()
destructor.
Definition: Stepper.cpp:46
movement::axis_mask_t asked_direction
Definition: Stepper.h:22
Link * driver
stores the driver.
Definition: comm.cpp:45
err_t init_pins()
initialize the pins for output
Definition: Stepper.cpp:106
void do_steps(int32_t steps)
Do an x number of steps.
Definition: Stepper.cpp:138
err_t do_step(movement::axis_mask_t direction)
Do a single step in a direction.
Definition: Stepper.cpp:15
const size_t pins_count
Definition: Stepper.h:26
err_t _set(movement::axis_mask_t axisMask, int16_t speed) override
Implementation of axis movement, this function is called from set(...).
Definition: Stepper.cpp:9
virtual err_t clear_pin(uint8_t pin_nr)
clear single pin after program is finished
Definition: Stepper.h:62
const bool active_high
Definition: Stepper.h:27
SemaphoreHandle_t asked_set_mutex
Definition: Stepper.h:20
uint16_t asked_speed
Definition: Stepper.h:21
void set_speed(int16_t speed)
Set speed of the stepper motor.
Definition: Stepper.cpp:128
virtual err_t set_pin(uint8_t pin_nr, bool value)=0
set pin level high or low
log::channel_t * log
Definition: Stepper.h:28
uint8_t get_pin(movement::axis_mask_t direction, uint8_t n=0)
pop pin from circular array buffer.
Definition: Stepper.cpp:51