#define stepPin 8
#define dirPin_rotate 9
#define dirPin_set 7
#define flagPin 2
#define potPin A0
int pot_value;
volatile bool interruptFlag = false;
void setup() {
// put your setup code here, to run once:
pinMode(stepPin, OUTPUT);
pinMode(flagPin, INPUT);
pinMode(dirPin_rotate, OUTPUT);
pinMode(dirPin_set, INPUT);
attachInterrupt(digitalPinToInterrupt(flagPin), handleInterrupt, RISING);
}
void handleInterrupt() {
interruptFlag = true;
}
void setPosition() {
int pot_value = analogRead(potPin);
int steps = map(pot_value, 0, 1023, 0, 200);
digitalWrite(dirPin_rotate, digitalRead(dirPin_set)); // sets the direction pin
for (int x=0; x<steps; x++){
digitalWrite(stepPin, HIGH);
delay(10);
digitalWrite(stepPin, LOW);
delay(10);
}
delay(500);
}
int direction() {
return digitalRead(flagPin);
}
void loop() {
digitalWrite(dirPin_rotate, HIGH);
for (int i=0; i<100; i++){
if (interruptFlag) {
interruptFlag = false; // Clear the flag
setPosition();
}
digitalWrite(stepPin, HIGH);
delay(50);
digitalWrite(stepPin, LOW);
delay(50);}
}