Stepper motor with accelerometer! problem!

Hi all,

I’m using an accelerometer mma7361 reading an angle of rotation and using this angle to make my stepper motor rotate a set number of rotations.

Here is my code:

``````#include <Stepper.h>

int analog_x;
float vol_x;
float g_x;
float degree_x;

int switchPin1 = 2;
int switchPin2 = 4;
int switchPin3 = 7;

const int stepsPerRevolution = 20;  // change this to fit the number of steps per revolution

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

int rotate(int num_rot);

void setup()
{

Serial.begin(9600);

pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);

myStepper.setSpeed(1000);

}

void loop()
{

}
vol_x=analog_x*5.0/1024;//convert analog_x-->voltage value(v)

pinMode(switchPin1, INPUT);

if(g_x<=1&&g_x>=-1) //We use this condition to prevent the overflow of asin(x).( If x>1 or x<-1, asin(x)=0)
{
degree_x=asin(g_x)*180.0/PI;//calculate the degree value
degree_x=0;
}

}

//fix the overflow condition
if(g_x>1)
degree_x=90;
if(g_x<-1)
degree_x=-90;

{
rotate(3);
}

{
rotate(5);
}

//#########################
//print
Serial.print("\t");
Serial.print("\t");
Serial.print("\t");
Serial.print("\t");
Serial.print("\t");
Serial.print("\t");
Serial.print("x1:");
Serial.print(degree_x);

delay(200);

}

//////////////////////////////////////////////

int rotate(int num_rot)
{
for(int i = 0 ; i < 10 ; i++)
{
for(int i = 0 ; i < num_rot ; i++)
{
myStepper.step(20);
}
}

return 1;

}
``````

now I’m certain that:

1. I can read an angle and save it in a variable (degree_x)
2. the function called int rotate(num_rot) works. if input is 5 the motor rotates 5 or maybe 6 but this is not a problem.
3)switch buttons work prefectly
3. motor and mma7361 connections are correct(checked each individually)
5)I’ve checked certain parts of the code alone and they seem to work properly

now the problem is the following:

in my general if statement condition

``````if(digitalRead(switchPin1)==1 && digitalRead(switchPin2)==0 && digitalRead(switchPin3)==0 && ?? <= degree_x < ??)
``````

the degree_x is the problem!
first if i have the same combination of inputs for the switch buttons the angle (degree_x)doesn’t make a difference, in other words in my previous provided code the motor first rotates 3 times then 5 times regardless of degree_x. The moment I press the button the motor starts rotating, completes the rotations then stops!

I have even tried this with no switch buttons but the same happens! the motor rotates every time i call the function rotate, regardless if the angle degree_x in the condition is met or not!

second to that the moment the motor starts rotating the value of degree_x changes unbelievably, for example if it was
5± .5 once the motor rotates it becomes 40± .5 and does not go down at all until I re-upload the sketch!

does anybody have an explanation or better a solution!

pls I need help!

Can you explain in English what your complex IF statement is intended to do?

...R

What are the question marks in the if statement for ??