Hello everyone
help to understand the code
need to increase
pulse_buffer in 1.2
but the code only allows integer 1 2 and so on.
tried changing the pulse_buffer datatype to round off STEPS_PR_ENCODER_PULSE
but it only works equally well with the whole. can still some parameter increase to then divide?
#define ENCODER_PULSE_PIN 2
#define ENCODER_DIR_PIN 3
#define DRIVER_STEP_PIN 4
#define DRIVER_DIR_PIN 7
#define DRIVER_EN_PIN 8
#define STEPS_PR_ENCODER_PULSE 1
#define DRIVER_PULSE_PERIOD_US 1
enum Driver_pulse_state_enum {PULSE_IDLE, PULSE_HIGH, PULSE_LOW};
uint8_t dir = LOW;
uint16_t pulse_buffer = 0;
unsigned long time_now = 0;
uint16_t driver_pulse_hold_time_us = DRIVER_PULSE_PERIOD_US/2;
uint8_t driver_pulse_state = PULSE_IDLE;
void setup() {
pinMode(ENCODER_PULSE_PIN, INPUT);
pinMode(ENCODER_DIR_PIN, INPUT);
pinMode(DRIVER_STEP_PIN, OUTPUT);
pinMode(DRIVER_DIR_PIN, OUTPUT);
pinMode(DRIVER_EN_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_PULSE_PIN), encoderISR, RISING);
digitalWrite(DRIVER_EN_PIN, HIGH);
void loop() {
if((pulse_buffer) && (driver_pulse_state == PULSE_IDLE)){
driver_pulse_state = PULSE_HIGH;
digitalWrite(DRIVER_DIR_PIN, digitalRead(ENCODER_DIR_PIN));
digitalWrite(DRIVER_STEP_PIN, HIGH);
time_now = micros();
}
if((micros() - time_now > driver_pulse_hold_time_us) && (driver_pulse_state == PULSE_LOW)){
driver_pulse_state = PULSE_HIGH;
digitalWrite(DRIVER_STEP_PIN, HIGH);
time_now = micros();
}
if((micros() - time_now > driver_pulse_hold_time_us) && (driver_pulse_state == PULSE_HIGH)){
digitalWrite(DRIVER_STEP_PIN, LOW);
time_now = micros();
pulse_buffer -= 1;
if(pulse_buffer < 0){
pulse_buffer = 0;
}
if(pulse_buffer){
driver_pulse_state = PULSE_LOW;
}
else{
driver_pulse_state = PULSE_IDLE;
}
}
}
void encoderISR(){
pulse_buffer += STEPS_PR_ENCODER_PULSE;
}