#define X_STEP 17 // X motor STEP pin #define X_DIR 16 // X motor DIR pin #define ENX 18 // X motor Enable pin #define Y_STEP 20 // Y motor STEP pin #define Y_DIR 19 // Y motor DIR pin #define ENY 21 // Y motor Enable pin void setup() { Serial.begin(115200); pinMode(0, OUTPUT); // For demo purposes //Stepper Pins pinMode(X_STEP, OUTPUT); pinMode(X_DIR, OUTPUT); pinMode(ENX, OUTPUT); pinMode(Y_STEP, OUTPUT); pinMode(Y_DIR, OUTPUT); pinMode(ENY, OUTPUT); // Enable motors digitalWrite(ENX, HIGH); digitalWrite(ENY, HIGH); } void loop() { if (Serial.available()) { String command = Serial.readStringUntil('\n'); command.trim(); // Remove whitespace/newlines if (command == "ON") { digitalWrite(0, HIGH); // Example action Serial.println("ON"); } else if (command == "OFF") { digitalWrite(0, LOW); Serial.println("OFF"); } else if (command == "y-") { digitalWrite(ENY, LOW); delay(60); turnY(false,10); Serial.println("Y-10"); delay(60); digitalWrite(ENY, HIGH); } else if (command == "y+") { digitalWrite(ENY, LOW); delay(60); turnY(true,10); Serial.println("Y+10"); delay(60); digitalWrite(ENY, HIGH); } else if (command == "x-") { digitalWrite(ENX, LOW); delay(60); turnX(false,10); Serial.println("X-10"); delay(60); digitalWrite(ENX, HIGH); } else if (command == "x+") { digitalWrite(ENX, LOW); delay(60); turnX(true,10); Serial.println("X+10"); delay(60); digitalWrite(ENX, HIGH); } } } // Turn Y-Axis void turnY(bool inward, int steps) { digitalWrite(Y_DIR, inward ? HIGH : LOW); for (int i = 0; i < steps; i++) { step(Y_STEP); delayMicroseconds(200); } } // Turn X‑axis void turnX(bool inward, int steps) { digitalWrite(X_DIR, inward ? HIGH : LOW); for (int i = 0; i < steps; i++) { step(X_STEP); delayMicroseconds(200); } } // Generic step pulse generator void step(int pin) { digitalWrite(pin, HIGH); delayMicroseconds(60); digitalWrite(pin, LOW); delayMicroseconds(600); }