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?
or how it make by another way because its impossible set impulse 1.2
#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; }