Im trying to interrupt my current function. Currently, when I press a button, my stepper motor turns. But I cannot stop it in the middle of it turning. It completes the full rotation before i can press the button again to make it rotate.
#include <IRremote.h>
#define button1 16582903
#define button2 16615543
#define button3 16599223
#define RECV_PIN 10
IRrecv irrecv(RECV_PIN);
decode_results results;
long Received = 0 ;
#define DIR_PIN 2
#define STEP_PIN 3
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(RECV_PIN , INPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop(){
if (irrecv.decode(&results)) {
Received = results.value ;
switch (Received) {
case button1:
digitalWrite (STEP_PIN, HIGH);
digitalWrite (DIR_PIN, HIGH);
//rotate a specific number of degrees
rotateDeg(3600, .5);
delay(1000);
break;
case button2:
digitalWrite( STEP_PIN, HIGH);
digitalWrite( DIR_PIN, LOW);
rotateDeg(-3600, .5); //reverse
delay(1000);
break;
}
irrecv.resume(); // Receive the next value
}
}
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
if (Received==button2){
digitalWrite(STEP_PIN, LOW);
digitalWrite( DIR_PIN, HIGH);
break;
}
}
}
For the last part, i thought that the break would jump it out of the for loop? Am I mistaken?