// Solar Cell - Light Meter
// John Schimmel - http://www.base2john.com
// initial code by Tom Igoe
import processing.serial.*;
Serial myPort; // The serial port
boolean firstContact = false;
int valueToGraph,xpos,i;
int pX, pY;
int zoom = 10; //actually controls the delay
void setup() {
size(400,255);
doBackGround();
// List all the available serial ports
println(Serial.list());
// keyspan on my powerbook is in slot 3 or [2]
myPort = new Serial(this, Serial.list()[2], 9600);
myPort.write(65);
}
void draw() {
while (myPort.available() > 0) {
processSerial();
firstContact=true;
}
if (firstContact == false) {
delay(300);
myPort.write(65);
}
}
void drawGraph (int value) {
stroke(0,255,0);
strokeWeight(1);
// draw the line:
line(pX, pY, i, height-value);
// at the edge of the screen, go back to the beginning:
if (i >= width-2) {
i = 0;
pX = 0;
doBackGround();
}
else {
pX = i;
i++;
}
pY = height-value; //previous y.
}
void processSerial() {
// Expand array size to the number of bytes you expect
byte[] inBuffer = new byte[1];
inBuffer = myPort.readBytes();
myPort.readBytes(inBuffer);
if (inBuffer != null) {
String myString = new String(inBuffer);
int value = int(myString);
//println(myString);
drawGraph(value);
}
delay(zoom);
myPort.write(65);
}
void doBackGround() {
//make a gradient white on top - black on bottom background
println("clear screen");
for (int i=0;i<height;i++) {
stroke(height-i);
line(0,i,width,i);
}
}