byte directionPin = 8;
byte stepPin = 9;
byte ledPin = 13;
int numberOfSteps = 200;
int pulseWidthMicros = 20; // Microseconds
int millisBetweenSteps = 10; // Milliseconds - adjust for speed control
#define SWITCH1 2
#define SWITCH2 3
#define SWITCH3 4
#define SWITCH4 5
void setup() {
Serial.begin(9600);
Serial.println("Starting StepperTest");
pinMode(directionPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(SWITCH1, INPUT_PULLUP);
pinMode(SWITCH2, INPUT_PULLUP);
pinMode(SWITCH3, INPUT_PULLUP);
pinMode(SWITCH4, INPUT_PULLUP);
digitalWrite(ledPin, LOW);
}
void loop() {
if (digitalRead(SWITCH1) == LOW) {
millisBetweenSteps = 50; // 20% speed
} else if (digitalRead(SWITCH2) == LOW) {
millisBetweenSteps = 20; // 50% speed
} else if (digitalRead(SWITCH3) == LOW) {
millisBetweenSteps = 10; // 100% speed
} else if (digitalRead(SWITCH4) == LOW) {
millisBetweenSteps = 0; // Stop motor
}
if (millisBetweenSteps > 0) {
digitalWrite(directionPin, HIGH);
for (int n = 0; n < numberOfSteps; n++) {
if (digitalRead(SWITCH1) == LOW || digitalRead(SWITCH2) == LOW || digitalRead(SWITCH3) == LOW) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(pulseWidthMicros);
digitalWrite(stepPin, LOW);
delay(millisBetweenSteps);
digitalWrite(ledPin, !digitalRead(ledPin));
} else {
break; // Exit loop if no button is pressed
}
}
delay(1000);
digitalWrite(directionPin, LOW);
for (int n = 0; n < numberOfSteps; n++) {
if (digitalRead(SWITCH1) == LOW || digitalRead(SWITCH2) == LOW || digitalRead(SWITCH3) == LOW) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(pulseWidthMicros);
digitalWrite(stepPin, LOW);
delay(millisBetweenSteps);
digitalWrite(ledPin, !digitalRead(ledPin));
} else {
break; // Exit loop if no button is pressed
}
}
}
}