// A4988引脚连接Arduino引脚编号 #include const int dirPin = 46; // Direction const int stepPin = 47; // Step const int limit_forward = 28; // Ms3 const int limit_back = 30; // Ms2 // 步进电机旋转一周步数 const int STEPS_PER_REV = 1000; char cmd[10]; //用户指令字符 int data; //用户指令数据 int motorSpeed = 300; //电机转速(数值越小速度越小) AccelStepper stepper(4, stepPin, dirPin); unsigned long startTime; unsigned long endTime; unsigned long executionTime; String Get_Command; void setup() { // 设置引脚模式 pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(limit_forward, INPUT); pinMode(limit_back, INPUT); // 初始化电机步进模式为1/16步进 //digitalWrite(ms1Pin, HIGH); //digitalWrite(ms2Pin, HIGH); //digitalWrite(ms3Pin, HIGH); Serial.begin(9600); Serial.println("++++++++++++++++++++++++++++++++++"); Serial.println("+ Taichi-Maker A4988 Steper Demo +"); Serial.println("+ www.taichi-maker.com +"); Serial.println("++++++++++++++++++++++++++++++++++"); Serial.println(""); Serial.println("Please input motor command:"); digitalWrite(dirPin, HIGH); digitalWrite(limit_forward, HIGH); digitalWrite(limit_back, HIGH); // stepper.setMaxSpeed(100000); // 设置最大速度(根据你的需要调整) // stepper.setSpeed(50); // 设置起始速度(根据你的需要调整) } void loop() { if (Serial.available()) { // 讀取傳入的字串直到"\n"結尾 Get_Command = Serial.readStringUntil('\n'); if (Get_Command == "Move") { move(); Serial.println("OK"); // 回應訊息給電腦 } else { Serial.println("你想做什麼?"); } } } void move() { if (digitalRead(limit_back) == LOW) { digitalWrite(dirPin, LOW); while (true) { if (digitalRead(limit_forward) == LOW) { Serial.println("Motor emergency stop"); break; } digitalWrite(stepPin, HIGH); delayMicroseconds(motorSpeed); digitalWrite(stepPin, LOW); delayMicroseconds(motorSpeed); } } else { digitalWrite(dirPin, HIGH); while (true) { if (digitalRead(limit_back) == LOW) { Serial.println("Motor emergency stop"); break; } digitalWrite(stepPin, HIGH); delayMicroseconds(motorSpeed); digitalWrite(stepPin, LOW); delayMicroseconds(motorSpeed); } } } //void loop() //{ // startTime = millis(); // 记录开始时间 // for (int j = 0; j < 100; j++) // { // for (int i = 0; i < 200; i++) // { // digitalWrite(stepPin, HIGH); // delayMicroseconds(motorSpeed); // digitalWrite(stepPin, LOW); // delayMicroseconds(motorSpeed); // } // } // endTime = millis(); // executionTime = endTime - startTime; // // Serial.print("Execution time: "); // Serial.print(executionTime); // Serial.println(" ms"); //} //void loop() //{ // { // digitalWrite(stepPin, HIGH); // delayMicroseconds(motorSpeed); // endTime = millis(); // executionTime = endTime - startTime; // // Serial.print("Execution time: "); // Serial.print(executionTime); // Serial.println(" ms"); // } //} //void loop() { // if (Serial.available() > 0) { // char str[20]; // int STEPS; // Serial.readBytes(str, 20); // if (Serial.available()) // { // Serial.readBytes(cmd, 10); // Serial.println(atoi(cmd)); // motorSpeed = atoi(cmd); // // startTime = millis(); // 记录开始时间 // for (int j = 0; j < 100; j++) // { // for (int i = 0; i < 200; i++) // digitalWrite(stepPin, LOW); // delayMicroseconds(motorSpeed); // } // } // char *token = strtok(str, "\n"); // 使用 "\n" 作為分隔符 // if (token != NULL) { // STEPS = atoi(token); // 將分割後的字串轉換為整數 // Serial.println(STEPS); // } else { // Serial.println("未找到換行符"); // } // if (digitalRead(limit_forward) != HIGH || digitalRead(limit_back) != HIGH) // { // { // stepper.runToNewPosition(STEPS); // Serial.println("Motor end"); // } // } //} //void loop() { // if (Serial.available() > 0) { // // 讀取進來的 byte // char inByte = Serial.read(); // switch (inByte) { // case '1': // digitalWrite(dirPin, LOW); // while (true) // if (digitalRead(limit_forward) == LOW) { // Serial.println("Motor emergency stop"); // break; // } // digitalWrite(stepPin, HIGH); // delayMicroseconds(motorSpeed); // digitalWrite(stepPin, LOW); // delayMicroseconds(motorSpeed); // } // Serial.println("Motor end"); // break; // case '2': // digitalWrite(dirPin, HIGH); // while (true) // { // if (digitalRead(limit_back) == LOW) { // Serial.println("Motor emergency stop"); // break; // } // digitalWrite(stepPin, HIGH); // delayMicroseconds(motorSpeed); // digitalWrite(stepPin, LOW); // delayMicroseconds(motorSpeed); // } // Serial.println("Motor end"); // break; // default: // break; // } // } //}