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; }