Reputation: 213
I'm using Processing and an Arduino Uno to control the position of a circle on the screen using two potentiometers. The Arduino and computer communicate via bluetooth. Here is the code for the Processing sketch:
import processing.serial.*;
Serial myPort;
int x, y;
void setup() {
size(400, 400);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 115200);
myPort.bufferUntil('\n');
background(255);
noStroke();
}
void draw() {
}
void serialEvent(Serial myPort) {
println("here");
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
String items[] = split(inString, ',');
if (items.length > 1) {
float a = float(items[0]);
float b= float(items[1]);
x = (int) map(a, 0, 1023, 0, width);
y = (int) map(b, 0, 1023, 0, height);
background(255);
fill(255, 0, 0);
ellipse(x, y, 10, 10);
}
}
//myPort.write('\r');
}
Here is the code for the Arduino:
const int left_pot = A2;
const int right_pot = A3;
int x;
int y;
void setup(){
Serial.begin(115200);
/* while (Serial.available()<=0){
Serial.println("hello?");
}*/
}
void loop(){
//if (Serial.available() > 0) {
int inByte = Serial.read();
x = analogRead(left_pot);
y = analogRead(right_pot);
Serial.print(x);
Serial.print(", ");
Serial.println(y);
delay(2);
//}
}
As posted, the code works but the dot on the screen is very jittery. So I tried to implement a hand-shaking protocol based on "How Things Talk" (Igoe, page 62). The commented out lines are supposed to do that. But when they are uncommented, the red dot no longer displays and the processing sketch never gets to the command println("here").
I'm using 32-bit Processing 2.0.1.
Upvotes: 0
Views: 241
Reputation: 1433
Your Arduino sketch waits until it receives some data before it sends data. So your Processing sketch must first send something through serial to the Arduino. Currently it does not. Try adding something to get it to print:
void setup() {
size(400, 400);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 115200);
myPort.bufferUntil('\n');
background(255);
noStroke();
myPort.write('\r'); //Get the arduino to reply
}
Upvotes: 2