Hi, i am very new to arduino and so far i have about 70% of my code working, however, i want my main loop gain to be able to pause and then continue from when it left off. The program controls a stepper motor. The code is below :
#include <Stepper.h>
int delaylength = 5;
unsigned int average;
const int NumAverages = 10;
volatile boolean flag = false;
double currentstepnumber=0;
float angle;
double stepsPerRevolution=200;
int buttonPin = 30;
boolean buttonState= HIGH ;
int storeAnalogValue() { // fuction to store and average analog read for a 6 times
unsigned long accumulator = 0;
for(int i=0; i<NumAverages; i++) {
accumulator += analogRead(A5);
average= accumulator/NumAverages;
}
}
void enableChannel(int pinA, int pinB)
{
digitalWrite(pinA, LOW); //ENABLE CH A because brake is off so current passes through coil (set low)
digitalWrite(pinB, HIGH); //DISABLE CH B because brake is on so current passes does not through coil (set high)
}
void motorpinchange()// flag function to show when pin has changed so it can be intterrupted and read
{
flag = true;
}
void setPinDirection(int pin, int direction_pin, int pin_level) // i.e. setPinDirection(12, 8, HIGH)
{
digitalWrite(pin, pin_level); //Sets direction of CH
analogWrite(direction_pin, 255); //Moves CH at speed max speed - 255(-255) spein backwards(100% duty cycle)
}
void setup() {
Serial.begin(115200);
//establish motor direction toggle pins
pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW
pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW
//establish motor brake pins
pinMode(9, OUTPUT); //brake (disable) CH A
pinMode(8, OUTPUT); //brake (disable) CH B
pinMode(buttonPin, INPUT_PULLUP);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
Serial.println(buttonState);
do{
if(currentstepnumber ==200){
currentstepnumber= 0;
}
enableChannel(9, 8); // Enable CH A
setPinDirection(12, 3, HIGH); //Sets direction of CH A and Moves CH A
if (flag){
flag = false;
detachInterrupt(digitalPinToInterrupt(12));
attachInterrupt(digitalPinToInterrupt(13),motorpinchange ,CHANGE);
}
storeAnalogValue();
Serial.println(average);
currentstepnumber ++;
angle = ((currentstepnumber)*360)/(stepsPerRevolution);
Serial.println(angle);
delay(delaylength);
enableChannel(8, 9); // Enable CH B
setPinDirection(13, 11, LOW); //Sets direction of CH B and Moves CH B
if (flag){
flag = false;
detachInterrupt(digitalPinToInterrupt(12));
attachInterrupt(digitalPinToInterrupt(13),motorpinchange ,CHANGE);
}
storeAnalogValue();
Serial.println(average);
currentstepnumber ++;
angle = ((currentstepnumber)*360)/(stepsPerRevolution);
Serial.println(angle);
delay(delaylength);
enableChannel(9, 8); // Enable CH A
setPinDirection(12, 3, LOW); //Sets direction of CH A and Moves CH A
if (flag){
flag = false;
detachInterrupt(digitalPinToInterrupt(12));
attachInterrupt(digitalPinToInterrupt(13),motorpinchange ,CHANGE);
}
storeAnalogValue();
Serial.println(average);
currentstepnumber ++;
angle = ((currentstepnumber)*360)/(stepsPerRevolution);
Serial.println(angle);
delay(delaylength);
enableChannel(8, 9); // Enable CH B
setPinDirection(13, 11, HIGH); //Sets direction of CH B and Moves CH B
if (flag){
flag = false;
detachInterrupt(digitalPinToInterrupt(12));
attachInterrupt(digitalPinToInterrupt(13),motorpinchange ,CHANGE);
}
storeAnalogValue();
Serial.println(average);
currentstepnumber ++;
angle = ((currentstepnumber)*360)/(stepsPerRevolution);
Serial.println(angle);
delay(delaylength);
//Serial.println(buttonState);
buttonState = digitalRead(buttonPin);
//Serial.println(buttonState);
}while(buttonState!=LOW);
}
}