Tuan Nguyen 1 год назад
Родитель
Сommit
2ce8cbcc1f
1 измененных файлов с 98 добавлено и 0 удалено
  1. 98 0
      steps_calibration/steps_calibration.ino

+ 98 - 0
steps_calibration/steps_calibration.ino

@@ -0,0 +1,98 @@
+#include <AccelStepper.h>
+#include <math.h> // For mathematical operations
+
+// Stepper driver interface type
+#define rotInterfaceType AccelStepper::FULL4WIRE
+#define inOutInterfaceType AccelStepper::FULL4WIRE
+
+#define ROT_PIN1 14
+#define ROT_PIN2 12
+#define ROT_PIN3 26
+#define ROT_PIN4 27
+
+#define INOUT_PIN1 16
+#define INOUT_PIN2 17
+#define INOUT_PIN3 18
+#define INOUT_PIN4 19
+
+// Define stepper motor objects
+AccelStepper rotStepper(rotInterfaceType, ROT_PIN1, ROT_PIN3, ROT_PIN2, ROT_PIN4);
+AccelStepper inOutStepper(inOutInterfaceType, INOUT_PIN1, INOUT_PIN3, INOUT_PIN2, INOUT_PIN4);
+
+// Calibration variables
+long rotSteps = 0;   // Steps for the ROT axis
+long inOutSteps = 0; // Steps for the INOUT axis
+
+void setup() {
+  Serial.begin(115200); // Start serial communication
+  Serial.println("Stepper Calibration Tool");
+
+  // Set max speeds and accelerations
+  rotStepper.setMaxSpeed(1000);
+  rotStepper.setAcceleration(500);
+
+  inOutStepper.setMaxSpeed(1000);
+  inOutStepper.setAcceleration(500);
+
+  // Initial message
+  Serial.println("Commands:");
+  Serial.println(" r <steps> - Move rotation axis by <steps>");
+  Serial.println(" i <steps> - Move in-out axis by <steps>");
+  Serial.println(" reset r - Reset ROT axis steps to 0");
+  Serial.println(" reset i - Reset IN-OUT axis steps to 0");
+  Serial.println(" Example: r 200 (moves ROT axis 200 steps)");
+}
+
+void loop() {
+  if (Serial.available() > 0) {
+    String input = Serial.readStringUntil('\n'); // Read user input
+    input.trim();
+
+    if (input.length() > 0) {
+      if (input.startsWith("reset")) {
+        // Reset commands
+        char axis = input.charAt(6); // Get the axis to reset ('r' or 'i')
+
+        if (axis == 'r') {
+          // Reset ROT axis steps
+          rotSteps = 0;
+          Serial.println("ROT axis steps reset to 0.");
+        } else if (axis == 'i') {
+          // Reset IN-OUT axis steps
+          inOutSteps = 0;
+          Serial.println("IN-OUT axis steps reset to 0.");
+        } else {
+          Serial.println("Invalid reset command. Use 'reset r' or 'reset i'.");
+        }
+      } else {
+        // Movement commands
+        char axis = input.charAt(0);        // First character is the axis
+        long steps = input.substring(2).toInt(); // Convert remaining input to steps
+
+        if (axis == 'r') {
+          // Move rotation axis
+          Serial.print("Moving ROT axis by ");
+          Serial.print(steps);
+          Serial.println(" steps.");
+          rotSteps += steps;
+          rotStepper.move(steps);
+          while (rotStepper.run()); // Wait for movement to finish
+          Serial.print("Current ROT steps: ");
+          Serial.println(rotSteps);
+        } else if (axis == 'i') {
+          // Move in-out axis
+          Serial.print("Moving IN-OUT axis by ");
+          Serial.print(steps);
+          Serial.println(" steps.");
+          inOutSteps += steps;
+          inOutStepper.move(steps);
+          while (inOutStepper.run()); // Wait for movement to finish
+          Serial.print("Current IN-OUT steps: ");
+          Serial.println(inOutSteps);
+        } else {
+          Serial.println("Invalid command. Use 'r <steps>' or 'i <steps>'.");
+        }
+      }
+    }
+  }
+}