#define DirPIN PB2//PB2 #define StepPIN PB1//PB1 #define EnPIN PB0//PB0 boolean dir = 0, go = 0; int Mdelay, AD2; void setup() { pinMode(DirPIN, OUTPUT); pinMode(StepPIN, OUTPUT); pinMode(EnPIN, OUTPUT); pinMode(PB3, OUTPUT); digitalWrite(EnPIN, 1);// 完全关闭电机省电 digitalWrite(DirPIN, dir); digitalWrite(PB3, 1); } // the loop function runs over and over again forever void loop() { AD2 = analogRead(A2); if (AD2 < 44) { //SW2启停 go = !go; pinMode(PB3, OUTPUT); while (analogRead(A2) < 44); delay(100); AD2 = analogRead(A2); //Mdelay = map(analogRead(A2), 46, 976, 0, 300); delay(300); } else if (AD2 > 978) { //SW1切换方向 dir = !dir; AD2 = analogRead(A2); while (analogRead(A2) > 978); pinMode(PB3, OUTPUT); if(dir){digitalWrite(PB3, 0);} else{digitalWrite(PB3, 1);} digitalWrite(DirPIN, dir); } else { Mdelay = AD2 - 44; } if (go) { digitalWrite(EnPIN, 0);//启动电机 digitalWrite(DirPIN, dir); if (Mdelay < 0)Mdelay = 0; Mdelay = Mdelay; pinMode(PB3, OUTPUT); if(dir){digitalWrite(PB3, 0);} else{digitalWrite(PB3, 1);} digitalWrite(StepPIN, 0); for (int i = 0; i < Mdelay; i++) { delayMicroseconds(70); } pinMode(PB3, INPUT); digitalWrite(StepPIN, 1); for (int i = 0; i < Mdelay; i++) { delayMicroseconds(70); } }else{digitalWrite(EnPIN, 1);} }