//-------------------
// Processing code:
//-------------------
// analog_Ellipse_Motion
// -Reads analog data from the serial port
// and uses data to change 2D graphic image.
import processing.serial.*;
Serial myPort; // Create object from Serial class
String serialString; // variable for serial ASCII date
float val; // val for data from serial port
float yLoc = 100.0; // location on Y axis
float speed = 5.0; // pixels per movement
int radius = 45; // size of ellipse
int direction = 1; // 1 goes down, 0 goes up
void setup() {
size(600, 600);
smooth();
noStroke();
ellipseMode(RADIUS);
// Open connection to USB (COM port) at 9600 bps
myPort = new Serial(this, Serial.list()[2], 9600);
}
void draw() {
radius = 10 + int(val)/3; // scale analog reading
fill(0,12); // black, transluscent (alpha=12)
rect(0, 0, width, height); // rectangle covers screen
fill(255,255,225); // mix RGB color for ellipse
ellipse(2 * val, yLoc, radius, radius);
yLoc += (speed * direction);
if ((yLoc > height-radius) || (yLoc < radius)) {
direction = -direction;
}
}
//---- The SerialEvent function runs continuously in the background and
//---- stores new values whenever new data comes in on the serial port (USB)
void serialEvent(Serial myPort) {
serialString = myPort.readStringUntil(10); // Read until end of line character
if (serialString != null) {
serialString = trim(serialString);
val = int(serialString);
println(val);
} // end if
}
|