Control servos with arduino and processing

Hello everyone,

I am trying to control 2 servo motors with the mouse position on a processing window. However, it is not working and I can not figure out the problem (N.B. when I send a manual serial input on arduino the motors move)

Here are the codes:
Arudino:
//Arduino code:
#include <Servo.h>

Servo yservo; Servo xservo; // servos for x and y
//set initial values for x and y
int ypos = 0;
int xpos= 0;

void setup(){
xservo.attach(9); //(analog pin 0) for the x servo
yservo.attach(15); //(analog pin 1) for the y server

Serial.begin(19200); // 19200 is the rate of communication
Serial.println(“Rolling”); // some output for debug purposes.

}

void loop() {
static int v = 0; // value to be sent to the servo (0-180)
if ( Serial.available()) {
char ch = Serial.read(); // read in a character from the serial port and assign to ch
switch(ch) { // switch based on the value of ch
case ‘0’…‘9’: // if it’s numeric
v = v * 10 + ch - ‘0’;
/*
so if the chars sent are 45x (turn x servo to 45 degs)…
v is the value we want to send to the servo and it is currently 0
The first char (ch) is 4 so
010 = 0 + 4 - 0 = 4;
Second char is 4;
4
10 = 40 + 5 = 45 - 0 = 45;
Third char is not a number(0-9) so we drop through…
/
break;
case ‘x’: // if it’s x
/

…and land here
where we send the value of v which is now 45 to the x servo
and then reset v to 0
*/
xservo.write(v);
v = 0;
break;
case ‘y’:
yservo.write(v);
v = 0;
break;
}
}
}

Processing:

//Processing code:
import processing.serial.*;

int xpos=90; // set x servo’s value to mid point (0-180);
int ypos=90; // and the same here
Serial port; // The serial port we will be using

void setup()
{
size(360, 360);
frameRate(100);
println(Serial.list()); // List COM-ports
//select second com-port from the list (COM2 for my device)
// You will want to change the [1] to select the correct device
// Remember the list starts at [0] for the first option.
port = new Serial(this, Serial.list()[0], 19200);
port.clear();
smooth();
}

void draw()
{
fill(175);
rect(0, 0, 360, 360);
fill(255, 0, 0); //rgb value so RED
rect(180, 175, mouseX-180, 10); //xpos, ypos, width, height
fill(0, 255, 0); // and GREEN
rect(175, 180, 10, mouseY-180);
update(mouseX, mouseY);
// println(mouseX,mouseY);
}

void update(int x, int y)
{
//Calculate servo postion from mouseX
xpos= x/2;
ypos = y/2;
//Output the servo position ( from 0 to 180)
port.write(xpos+“x”);
port.write(ypos+“y”);
println(xpos+“x”);
}

The Arduino can echo what it read from the serial port. Processing can read the replies, and display them.

You should take advantage of this, to learn why the Arduino is not getting what you expect from Processing, so that you can adjust your expectations.