// 定义电机控制用常量
const int dirPin = 16; // 方向引脚
const int stepPin = 17; // 步进引脚
int pushButton = 19;
int pushButton2 = 18;
int pushButton3 = 14;
// 电机每圈步数
const int STEPS_PER_REV = 200;
// 消抖延迟时间
const int DEBOUNCE_DELAY = 50;
// 按键状态
int lastButtonState = HIGH; // 默认是高电平
void setup() {
Serial.begin(9600);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(pushButton, INPUT);
pinMode(pushButton2, INPUT);
pinMode(pushButton3, INPUT);
}
void loop() {
int buttonState = digitalRead(pushButton);
int buttonState2 = digitalRead(pushButton2);
int buttonState3 = digitalRead(pushButton3);
// 消抖处理
if (buttonState == LOW && lastButtonState == HIGH) {
delay(DEBOUNCE_DELAY);
buttonState = digitalRead(pushButton);
}
lastButtonState = buttonState;
if (buttonState == LOW && buttonState2 == HIGH) {
// 设置电机顺时针旋转
digitalWrite(dirPin, LOW);
rotateMotor();
Serial.println("19-down");
}
else if (buttonState == HIGH && buttonState2 == LOW) {
digitalWrite(dirPin, HIGH);
rotateMotor();
}
else if (buttonState == HIGH && buttonState2 == HIGH && buttonState3 == LOW) {
digitalWrite(dirPin, LOW);
runMotorUntilStop();
}
else {
Serial.println("off");
}
}
// 旋转函数
void rotateMotor() {
for (int x = 0; x < STEPS_PER_REV; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
}
//开始函数
void runMotorUntilStop() {
while (true) {
rotateMotor();
Serial.println(digitalRead(pushButton3));
if (digitalRead(pushButton3) == LOW) {
delay(1000); // 可选:消抖延迟
break;
}
}
}