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;
410 = 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");
}