Skip to content

Instantly share code, notes, and snippets.

@pmarkun
Created April 30, 2014 23:47
Show Gist options
  • Select an option

  • Save pmarkun/f95838fbad49bc0cfe4d to your computer and use it in GitHub Desktop.

Select an option

Save pmarkun/f95838fbad49bc0cfe4d to your computer and use it in GitHub Desktop.
/* Processing code for this example */
// Graphing sketch
// This program takes ASCII-encoded strings
// from the serial port at 9600 baud and graphs them. It expects values in the
// range 0 to 1023, followed by a newline, or newline and carriage return
// Created 20 Apr 2005
// Updated 18 Jan 2008
// by Tom Igoe
// This example code is in the public domain.
import processing.serial.*;
Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
void setup () {
// set the window size:
size(800, 600);
// List all the available serial ports
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my Arduino, so I open Serial.list()[0].
// Open whatever port is the one you're using.
myPort = new Serial(this, "/dev/ttyACM0", 115200);
// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');
// set inital background:
background(0);
fill(0);
// Setup markers
text("5V", 10, map(0, 0, 1023, 0, height));
text("2.5V", 10, map(1023/2, 0, 1023, 0, height));
text("0V", 10, map(1023, 0, 1023, 0, height));
}
void draw () {
// everything happens in the serialEvent()
}
void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');
if (inString != null) {
// trim off any whitespace:
inString = trim(split(inString, "\n")[0]);
//check multiple plots
String[] plots = split(inString, ",");
//reset text area
noStroke();
fill(0);
rect(0,0,100*plots.length,100);
color[] colors = { color(255,0,0), color(0,255,0), color(0,0,255), color(255,255,0), color(0,255,255) };
for (int p = 0;p < plots.length && p < 5;p++) {
// convert to an int and map to the screen height:
float inByte = float(trim(plots[p]));
inByte = map(inByte, 0, 1023, 0, height);
fill(colors[p]);
text(plots[p], 0+(p*30), 10);
// draw the line:
stroke(colors[p]);
line(xPos, height - inByte, xPos, height - inByte + 2);
}
// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(0);
// Setup markers
text("5V", width-30, map(0, 0, 1023, 0, height));
text("2.5V", width-30, map(1023/2, 0, 1023, 0, height));
text("0V", width-30, map(1023, 0, 1023, 0, height));
}
else {
// increment the horizontal position:
xPos++;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment