Hello,
I am trying to send the analog data which one arduino reads from the joysticks to the other.
Reading the joystick and sending data looks good.
Receiving part also works but if statement goes wrong after receiving.
If receiving data is 504, the code needs to show 'middle zone' but it says 'upper zone'.
Attachments are the snapshots of two parts operation.
Could you help me what is wrong in the following code?
Thanks.
- Transmitter code
// Reading analog value from Joystick
int JoyL_X_In = A8;
int JoyL_Y_In = A9;
int JoyR_X_In = A10;
int JoyR_Y_In = A11;
int JoyL_X_ADC, JoyL_Y_ADC, JoyR_X_ADC, JoyR_Y_ADC;
float JoyL_X_Vol, JoyL_Y_Vol, JoyR_X_Vol, JoyR_Y_Vol;
// Dummy values to send over serial
int value1 = 10;
int value2 = 100;
int value3 = 1000;
void setup() {
pinMode(JoyL_X_In, INPUT);
pinMode(JoyL_Y_In, INPUT);
pinMode(JoyR_X_In, INPUT);
pinMode(JoyR_Y_In, INPUT);
Serial.begin(9600);
}
void loop() {
// (1) Read Left Joystick X, Y
JoyL_X_ADC = analogRead(JoyL_X_In);
JoyL_Y_ADC = analogRead(JoyL_Y_In);
// Serial.print("Joystick_Left_X_ADC : ");
// Serial.println(JoyL_X_ADC);
// Serial.print("Joystick_Left_Y_ADC : ");
// Serial.println(JoyL_Y_ADC);
// (2) Read Right Joystick X, Y
JoyR_X_ADC = analogRead(JoyR_X_In);
JoyR_Y_ADC = analogRead(JoyR_Y_In);
/*
Serial.print("Joystick_Right_X_ADC : ");
Serial.println(JoyR_X_ADC);
Serial.print("Joystick_Right_Y_ADC : ");
Serial.println(JoyR_Y_ADC);
*/
// (3) Convert ADC value of Left Joystick to Physical
JoyL_X_Vol = (5.0/1023.0)*JoyL_X_ADC;
JoyL_Y_Vol = (5.0/1023.0)*JoyL_Y_ADC;
/*
Serial.print("Joystick_Left_X_Voltage : ");
Serial.println(JoyL_X_Vol);
Serial.print("Joystick_Left_Y_Voltage : ");
Serial.println(JoyL_Y_Vol);
*/
// (4) Convert ADC value of Right Joystick to Physical
JoyR_X_Vol = (5.0/1023.0)*JoyR_X_ADC;
JoyR_Y_Vol = (5.0/1023.0)*JoyR_Y_ADC;
/*
Serial.print("Joystick_Right_X_Voltage : ");
Serial.println(JoyR_X_Vol);
Serial.print("Joystick_Right_Y_Voltage : ");
Serial.println(JoyR_Y_Vol);
*/
// delay(10);
sendData(JoyL_X_ADC, JoyL_Y_ADC, JoyR_X_ADC, JoyR_Y_ADC);
}
void sendData(int JoyL_X_ADC, int JoyL_Y_ADC, int JoyR_X_ADC, int JoyR_Y_ADC){
Serial.print('A'); // 'H' defines start of transfer
// Serial.print(JoyL_X_ADC);
Serial.print(JoyL_X_ADC,DEC); // First value to send
Serial.print(","); // Comma-separated
Serial.print('B');
Serial.print(JoyL_Y_ADC,DEC);
Serial.print(",");
Serial.print('C');
Serial.print(JoyR_X_ADC,DEC);
Serial.print(",");
Serial.print('D');
Serial.print(JoyR_Y_ADC,DEC);
Serial.print(",");
Serial.println(" ");
delay(10);
}
- Receiver code
unsigned int JoyL_X_ADC, JoyL_Y_ADC, JoyR_X_ADC, JoyR_Y_ADC = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
while(Serial.available())
{
// Serial.find is supposed to read from the serial buffer till it hits 'A'
Serial.find('A');
// parseInt reads the first number it encounters (long) until it hits a comma
JoyL_X_ADC = Serial.parseInt();
Serial.print("JoyL_X_ADC : ");
Serial.println(JoyL_X_ADC);
Serial.println("-----------------------------------------------------------");
if(562 <= JoyL_X_ADC <= 1023) // Forward
{
Serial.println("Upper zone");
}
else if(0 <= JoyL_X_ADC < 462) // Backward
{
Serial.println("Lower zone");
}
else
{
Serial.println("Middle zone");
}
delay(60);
break;
}
}