#define EN 0 // PA4 #define PUL 1 // PA5 #define DIR 2 // PA6 #define REV 800 // steps/rev => 38mm #define STEP_DIST 38 // mm void rotate_CW(float distance) { Serial.print("Rotate CW by "); Serial.println(distance); int steps = (distance / STEP_DIST) * REV; digitalWrite(EN, HIGH); digitalWrite(DIR, LOW); for(int i = 0; i < steps; i++) { digitalWrite(PUL, LOW); delay(1); digitalWrite(PUL, HIGH); } digitalWrite(EN, LOW); } void rotate_CCW(float distance) { Serial.print("Rotate CCW by "); Serial.println(distance); int steps = (distance / STEP_DIST) * REV; digitalWrite(EN, HIGH); digitalWrite(DIR, HIGH); for(int i = 0; i < steps; i++) { digitalWrite(PUL, LOW); delay(1); digitalWrite(PUL, HIGH); } digitalWrite(EN, LOW); } void rotate(float distance) { if (distance > 0) { rotate_CW(distance); } else { rotate_CCW(-distance); } Serial.println("Done"); } void setup() { // put your setup code here, to run once: pinMode(EN, OUTPUT); pinMode(PUL, OUTPUT); pinMode(DIR, OUTPUT); // initialize stepper // digitalWrite(EN, HIGH); digitalWrite(PUL, HIGH); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: if (Serial.available()) { // String input = ""; // input = Serial.readString(); // Serial.print("Received:"); Serial.println(input); float input_distance = Serial.parseFloat(); if (input_distance > 0 || input_distance < 0) { rotate(input_distance); } delay(1000); } }