Issue With Interrupt Code in Stepper Motor Design


hello,

i working on project involving stepper motor.  have written code stepper operated 4 push buttons, controlling speed, direction, , number of steps.  want include interrupt when limit switch hit, motor stop , reverse direction immediately.

i able find code online assist in design.  push button in main loop work fine, when limit switch pressed, not execute expected.  stops current execution of stepper motor, doesn't go desired code execution, entitled pin_isr in code.  i've attached code below.  please let me know if see errors. way, working arduino uno combined shield motor.
code: [select]
#include <wire.h>
#include <adafruit_motorshield.h>
#include "utility/adafruit_ms_pwmservodriver.h"




// create motor shield object default i2c address
adafruit_motorshield afms = adafruit_motorshield();
// or, create different i2c address (say stacking)
// adafruit_motorshield afms = adafruit_motorshield(0x61);

// connect stepper motor 200 steps per revolution (1.8 degree)
// motor port #2 (m3 , m4)
adafruit_steppermotor *mymotor = afms.getstepper(200, 2);
//initializing pin numbers
const int pushbutton1=13;
const int pushbutton2=10;
const int pushbutton3=9;
const int pushbutton4=3;
const int switchpin=2;

volatile int switchstate = 0;         // variable reading limit switch status

//initializing variables set eqaul pin values

int val1;
int val2;
int val3;
int val4;



void setup()
{
  serial.begin(9600);           // set serial library @ 9600 bps
  serial.println("stepper test!");

  afms.begin();  // create default frequency 1.6khz
  //afms.begin(1000);  // or different frequency, 1khz
  //activates internal pullup resistors, , sets selected pins inputs
 
  pinmode(pushbutton1,input_pullup);
  pinmode(pushbutton2,input_pullup);
  pinmode(pushbutton3,input_pullup);
  pinmode(pushbutton4,input_pullup);
  pinmode(switchpin, input_pullup);

 
 
  attachinterrupt(0, pin_isr, falling);
  //initialize variables zero
  val1=0;
  val2=0;
  val3=0;
  val4=0;
 
}

void loop()
{//receives signals each pin, coming corresponding push button


   val1=digitalread(pushbutton1);
   val2=digitalread(pushbutton2);
   val3=digitalread(pushbutton3);
   val4=digitalread(pushbutton4);
   //if pushbutton1 pressed, signal low, want cause motor
   //rotate forward @ slow speed, short distance
   if(val1==low)
   {
      mymotor->setspeed(50); // 10 rpm
      mymotor->step(200, forward, double);
   }
   //if pushbutton2 pressed, signal low, want cause motor
   //rotate forward @ faster speed, set distance
   if(val2==low)
   {
      mymotor->setspeed(1000);
      mymotor->step(2400, forward, double);
   }
   //if pushbutton3 pressed, signal low, want cause motor
   //rotate backwards @ slow speed, set distance
   if(val3==low)
   {
      mymotor->setspeed(50);
      mymotor->step(200, backward, double);
   }
   //if pushbutton4 pressed, signal low, want cause motor
   //rotate backwards @ faster speed, set distance
   if(val4==low)
   {
      mymotor->setspeed(1000);
      mymotor->step(2400, backward, double);
   }
 
 
}

void pin_isr()
{
 
 mymotor->setspeed(100);
 mymotor->step(500, backward, double);
 
}

generally, interrupt routine should little possible - set flag can check in main loop. don't forget interrupts disabled there too. move motor code out.


Arduino Forum > Using Arduino > Project Guidance > Issue With Interrupt Code in Stepper Motor Design


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts