Assignment 7.4

posted Jul 8, 2010, 4:28 PM by Unknown user
This program requires two potentiometers, one connected to analog pin 1 and the other connected to analog pin 2. It uses the values of those potentiometers to determine the coordinates of an ellipse. An ellipse is drawn every time the draw method is run, though the background is not reset, so each ellipse drawn is shown until the program is reset. This creates the appearance of a line being drawn.
Here are the codes:
Arduino:
 
int potPin1 = 1;      // set up variables
int potPin2 = 2;
int val = 0;
void setup() {
  Serial.begin(9600);      // begin serial communication at 9600 bps
}
void loop() {
  val = analogRead(potPin1);    // read potPin1 and store its value in val
  Serial.print(val, DEC);       // print the value of val
  Serial.print(",");            // separate the values with a comma
 
  val = analogRead(potPin2);
  Serial.println(val, DEC);
}
 
Processing:
 
import processing.serial.*;    // import Processing library
Serial myPort;                 // set up variables
float xpos;
float ypos;
void setup() {
  size(600, 600);        // set window size to 600 x 600 pixels
  myPort = new Serial(this, Serial.list()[0], 9600);
  myPort.bufferUntil('\n');      // store myPort's values in a buffer until the value is reached
  background(225);    // sets background color to white
}
void draw() {
  fill(0);      // set fill color to black
  stroke(0);    // set stroke color to black
  ellipse(xpos, ypos, 5, 5);    // draw ellipse
}
void serialEvent(Serial myPort) {
  String myString = myPort.readStringUntil('\n');  // read the serial buffer
  if (myString != null) {    // if it gets any bytes other than the linefeed,
    myString = trim(myString);   
    int sensors[] = int(split(myString, ','));    // split the string at the commas
    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t");    // print the values
    }
    println();    // add a linefeed after all the sensor values are printed
    if (sensors.length > 1) {
      xpos = map(sensors[0], 0, 1023, 0, 600);    // adjust the values so the ellipse will stay in the window
      ypos = map(sensors[1], 0, 1023, 0, 600);
    }
  }
}
 
Note:
    If the potentiometer is adjusted too quickly, the circles will have a gap between them like a break in the line. If you just slow down and don't try to race someone you should be fine.
Comments