Hallo everyone....
i have a problem on arduino using serial communication,,
i am trying to rotate servo using the x and y value from accelerometer sensor(MMA7361) wirelessly.
list of component i use ;
Arduino UNO, 2 unit
Xbee series 1 module, 2 unit
MMA7361 accelerometer , 2 unit
push button, 1 unit
and Hitec HS422 servo , 3 unit.
the x, and y value from accelerometer 1, used to control servo A and servo B.
and the y value from another acccelerometer used to control servo C. and push button to control servo D
here's the code
Arduino 1.
int aPin = 1;//accelerometer pin
int bPin = 2;
int cPin = 3;
int buttonPin = 8;//button pin
int buttonState = 0;
void setup()
{
Serial.begin(9600);
pinMode(aPin, INPUT);
pinMode(bPin, INPUT);
pinMode(cPin, INPUT);
pinMode(buttonPin,INPUT_PULLUP);
}
void loop()
{
// axel 1 x
int data = analogRead(bPin);
if (data < 200)
{ Serial.write("a");}
else if ( data > 200 && data < 350)
{ Serial.write ("b");}
else if (data > 350 && data <450)
{Serial.write("c");}
else if ( data > 450)
{Serial.write("d");}
//axel 1 y
int data2 = analogRead(aPin);
if (data2 < 200)
{ Serial.write("g");}
else if ( data2 > 200 && data2 < 300)
{ Serial.write ("h");}
else if (data2 > 300 && data2 <350)
{Serial.write("i");}
else if( data2 > 350 && data2 < 400)
{Serial.write("j");}
else if( data2 > 400 && data2 < 430)
{Serial.write("k");}
else if ( data2 > 430)
{Serial.write("l");}
//axel 2 y
int data3 = analogRead(cPin);
if (data3 < 200)
{ Serial.write("t");}
else if ( data3 > 200 && data3 < 300)
{ Serial.write ("s");}
else if (data3 > 300 && data3 <350)
{Serial.write("r");}
else if( data3 > 350 && data3 < 400)
{Serial.write("q");}
else if( data3 > 400 && data3 < 430)
{Serial.write("p");}
else if ( data3 > 430)
{Serial.write("o");}
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Serial.write("1");
}
else {
Serial.write("0");
}
delay(10);
}
Arduino 2,
#include <Servo.h>
#define take 10
#define release 170
int servoPin = 8;
int servo2Pin = 9;
int servo3Pin = 10;
int servo4Pin = 11;
Servo aservo;
Servo bservo;
Servo cservo;
Servo dservo;
char val;
void setup()
{
Serial.begin(9600);
aservo.attach(servoPin);
bservo.attach(servo2Pin);
cservo.attach(servo3Pin);
dservo.attach(servo4Pin);
aservo.write(65);
bservo.write(90);
cservo.write(100);
dservo.write(release);
}
void loop()
{
if(Serial.available()){
val = Serial.read();
delay(10);
switch(val)
{
case'a' :
aservo.write(0);
break;
case'b' :
aservo.write(65);
break;
case'c' :
aservo.write(120);
break;
case'd':
aservo.write(160);
break;
case 'l':
bservo.write(10);
break;
case 'k' :
bservo.write(30);
break;
case 'j' :
bservo.write(60);
break;
case 'i' :
bservo.write(90);
break;
case 'h' :
bservo.write(120);
break;
case 'g' :
bservo.write(180);
break;
case'o' :
cservo.write(0);
break;
case'p' :
cservo.write(30);
break;
case'q' :
cservo.write(50);
break;
case'r':
cservo.write(80);
break;
case's':
cservo.write(100);
break;
case't':
cservo.write(120);
break;
case '1' :
dservo.write(take);
break;
case '0' :
dservo.write(release);
break;
default:
break;
}
Serial.print(" data = ");
Serial.println( val);
Serial.flush();
}
}
the problem is, the data that i received in the second arduino is not exactly what i sent from the first arduino.. and sometimes the receiving only from one of each sensors.
could anybody help me please???
Thank you very much