#define RPMS 104.0 #define STEP_PIN 9 #define DIRECTION_PIN 8 #define LEFT 2 #define RIGHT 3 #define STEP_PINB 10 #define DIRECTION_PINB 11 #define FEED 4 #define STEPS_PER_REV 200 #define MICROSTEPS_PER_STEP 8 #define MICROSECONDS_PER_MICROSTEP (1000000/(STEPS_PER_REV * MICROSTEPS_PER_STEP)/(RPMS / 60)) int Stepping = false; uint32_t LastStepTime = 0; uint32_t CurrentTime = 0; void setup() { pinMode(STEP_PIN, OUTPUT); pinMode(DIRECTION_PIN, OUTPUT); digitalWrite(STEP_PIN, LOW); pinMode(LEFT,INPUT); pinMode(RIGHT,INPUT); pinMode(STEP_PINB, OUTPUT); pinMode(DIRECTION_PINB, OUTPUT); digitalWrite(STEP_PINB, LOW); pinMode(FEED,INPUT); } void loop() { if (digitalRead(LEFT) == LOW) { digitalWrite(DIRECTION_PIN, LOW); CurrentTime = micros(); if ((CurrentTime - LastStepTime) > MICROSECONDS_PER_MICROSTEP) { LastStepTime = CurrentTime; digitalWrite(STEP_PIN, HIGH); delayMicroseconds((MICROSECONDS_PER_MICROSTEP * 0.9)/2); digitalWrite(STEP_PIN, LOW); delayMicroseconds((MICROSECONDS_PER_MICROSTEP * 0.9)/2); } } if (digitalRead(RIGHT) == LOW) { digitalWrite(DIRECTION_PIN, HIGH); CurrentTime = micros(); if ((CurrentTime - LastStepTime) > MICROSECONDS_PER_MICROSTEP) { LastStepTime = CurrentTime; digitalWrite(STEP_PIN, HIGH); delayMicroseconds((MICROSECONDS_PER_MICROSTEP * 0.9)/2); digitalWrite(STEP_PIN, LOW); delayMicroseconds((MICROSECONDS_PER_MICROSTEP * 0.9)/2); } } if (digitalRead(FEED) == LOW && Stepping == false) { digitalWrite(10, LOW); digitalWrite(11, HIGH); delay(1); digitalWrite(11, LOW); delay(1); } }