I finally had to try this one out. What fun! It was quick and easy to get going.
My first question was "Where is the scale?" I put a rechargeable battery across the input and wanted to know how close to charged it was, but without a scale I couldn't read the absolute voltage.
A few minutes later I had a version of the Processing code that draws a scale. (0-5) I also changed it so it doesn't erase the whole screen for every reading so I would not have to constantly redraw the scale. Now it only erases the line it is about to draw. I made the window much bigger too.
The code is pretty much off the cuff, could still use some polishing. See what you think:
/*
/*
* Oscilloscope
* Gives a visual rendering of analog pin 0 in realtime.
*
* This project is part of Accrochages
* See http://accrochages.drone.ws
*
* (c) 2008 Sofian Audry (info@sofianaudry.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import processing.serial.*;
Serial port; // Create object from Serial class
int val; // Data received from the serial port
int[] values;
void setup()
{
size(1400, 700);
// Open the port that the board is connected to and use the same speed (9600 bps)
port = new Serial(this, Serial.list()[0], 9600);
values = new int[width];
smooth();
background(0);
stroke(255);
DrawScale();
}
int getY(int val) {
return (int)(val / 1023.0f * height) - 1;
}
void DrawScale()
{
line(0, 0, 15, 0);
line(0, (height/50), 5, (height/50));
line(0, (height/50)*2, 5, (height/50)*2);
line(0, (height/50)*3, 5, (height/50)*3);
line(0, (height/50)*4, 5, (height/50)*4);
line(0, (height/50)*5, 10, (height/50)*5);
line(0, (height/50)*6, 5, (height/50)*6);
line(0, (height/50)*7, 5, (height/50)*7);
line(0, (height/50)*8, 5, (height/50)*8);
line(0, (height/50)*9, 5, (height/50)*9);
line(0, (height/5), 15, (height/5));
line(0, (height/5)+(height/50), 5, (height/5)+(height/50));
line(0, (height/5)+(height/50)*2, 5, (height/5)+(height/50)*2);
line(0, (height/5)+(height/50)*3, 5, (height/5)+(height/50)*3);
line(0, (height/5)+(height/50)*4, 5, (height/5)+(height/50)*4);
line(0, (height/5)+(height/50)*5, 10, (height/5)+(height/50)*5);
line(0, (height/5)+(height/50)*6, 5, (height/5)+(height/50)*6);
line(0, (height/5)+(height/50)*7, 5, (height/5)+(height/50)*7);
line(0, (height/5)+(height/50)*8, 5, (height/5)+(height/50)*8);
line(0, (height/5)+(height/50)*9, 5, (height/5)+(height/50)*9);
line(0, (height/5)*2, 15, (height/5)*2);
line(0, (height/5)*2+(height/50), 5, (height/5)*2+(height/50));
line(0, (height/5)*2+(height/50)*2, 5, (height/5)*2+(height/50)*2);
line(0, (height/5)*2+(height/50)*3, 5, (height/5)*2+(height/50)*3);
line(0, (height/5)*2+(height/50)*4, 5, (height/5)*2+(height/50)*4);
line(0, (height/5)*2+(height/50)*5, 10, (height/5)*2+(height/50)*5);
line(0, (height/5)*2+(height/50)*6, 5, (height/5)*2+(height/50)*6);
line(0, (height/5)*2+(height/50)*7, 5, (height/5)*2+(height/50)*7);
line(0, (height/5)*2+(height/50)*8, 5, (height/5)*2+(height/50)*8);
line(0, (height/5)*2+(height/50)*9, 5, (height/5)*2+(height/50)*9);
line(0, (height/5)*3, 15, (height/5)*3);
line(0, (height/5)*3+(height/50), 5, (height/5)*3+(height/50));
line(0, (height/5)*3+(height/50)*2, 5, (height/5)*3+(height/50)*2);
line(0, (height/5)*3+(height/50)*3, 5, (height/5)*3+(height/50)*3);
line(0, (height/5)*3+(height/50)*4, 5, (height/5)*3+(height/50)*4);
line(0, (height/5)*3+(height/50)*5, 10, (height/5)*3+(height/50)*5);
line(0, (height/5)*3+(height/50)*6, 5, (height/5)*3+(height/50)*6);
line(0, (height/5)*3+(height/50)*7, 5, (height/5)*3+(height/50)*7);
line(0, (height/5)*3+(height/50)*8, 5, (height/5)*3+(height/50)*8);
line(0, (height/5)*3+(height/50)*9, 5, (height/5)*3+(height/50)*9);
line(0, (height/5)*4, 15, (height/5)*4);
line(0, (height/5)*4+(height/50), 5, (height/5)*4+(height/50));
line(0, (height/5)*4+(height/50)*2, 5, (height/5)*4+(height/50)*2);
line(0, (height/5)*4+(height/50)*3, 5, (height/5)*4+(height/50)*3);
line(0, (height/5)*4+(height/50)*4, 5, (height/5)*4+(height/50)*4);
line(0, (height/5)*4+(height/50)*5, 10, (height/5)*4+(height/50)*5);
line(0, (height/5)*4+(height/50)*6, 5, (height/5)*4+(height/50)*6);
line(0, (height/5)*4+(height/50)*7, 5, (height/5)*4+(height/50)*7);
line(0, (height/5)*4+(height/50)*8, 5, (height/5)*4+(height/50)*8);
line(0, (height/5)*4+(height/50)*9, 5, (height/5)*4+(height/50)*9);
}
void draw()
{
while (port.available() >= 3)
{
if (port.read() == 0xff)
{
val = (port.read() << 8) | (port.read());
}
}
for (int i=0; i<width-15-1; i++)
values[i] = values[i+1];
values[width-15-1] = val;
for (int x=1; x<(width-15); x++)
{
// Erase the line I'm about to draw
stroke(0);
line(width-1-x, 0, width-1-x, height);
// Draw this reading
stroke(255);
line(width-x, height-1-getY(values[x-1]),
width-1-x, height-1-getY(values[x]));
}
}