#include const int servoPin = A5; Servo myservo; #define enPin 8 // stepper motor X #define stepXPin 2 #define dirXPin 5 // stepper motor Y #define stepYPin 3 #define dirYPin 6 #define stepsPerRevolution 200 #define delayms 1000 void setup() { Serial.begin(115200); pinMode(servoPin, OUTPUT); pinMode(stepXPin, OUTPUT); pinMode(dirXPin, OUTPUT); pinMode(stepYPin, OUTPUT); pinMode(dirYPin, OUTPUT); pinMode(enPin , OUTPUT); digitalWrite(enPin, HIGH); // disable Stepper action001(); // make a star shape delay(3000); } void loop() { } void feed(int distance) { digitalWrite(enPin, LOW); // enable Stepper digitalWrite(dirYPin, HIGH); for (int i = 0; i < stepsPerRevolution * (distance / 2); i++) { digitalWrite(stepYPin, HIGH); delayMicroseconds(delayms); digitalWrite(stepYPin, LOW); delayMicroseconds(delayms); } delay(500); digitalWrite(enPin, HIGH); // disable Stepper } void turn(boolean direction, int angle) { digitalWrite(enPin, LOW); // enable Stepper digitalWrite(dirXPin, direction); for (int i = 0; i < stepsPerRevolution * angle; i++) { digitalWrite(stepXPin, HIGH); delayMicroseconds(delayms); digitalWrite(stepXPin, LOW); delayMicroseconds(delayms); } delay(500); } void header(boolean position) { myservo.attach(servoPin); if (position) { myservo.write(20); } else { myservo.write(110); } delay(1500); // delay for 1.5 second myservo.detach(); } void action001() { header(false); // ⬇ true = high position, false = position feed(30); // feed 25mm for (int j = 0; j < 5; j++) { header(true); // ⬆ turn(HIGH, 4); // ▶ to +4 for (int i = 0; i < 4; i++) { feed(5); // feed 5mm turn(HIGH, 1); // ▶ } // ▶ to +8 尖角轉彎 turn(LOW, 6); // ◀ to 2 header(false); // ⬇ feed(25); // feed 25mm header(true); // ⬆ turn(LOW, 5); // ◀ to -3 turn(HIGH, 2); // ◀ to -1 header(false); // ⬇ feed(30); // feed 25mm turn(HIGH, 1); // ▶ to 0 } }