… and neither does a picture. Or something like that.
So my first time into processing and… i kinda like it. My only gripe is it’s name. I dare you to go to google and look do a casual search for code using the name “processing.” Go ahead. I’ll wait.
Anyhoo, here’s my etch-a-sketch.
Here’s the processing code:
import processing.serial.*;
Serial myPort;
int xpos, ypos;
int pingX=0,pingY=0;
/*
this will be a psuedo matrix to hold
all generated points. the main index of
bob will represent x, while the arraylist
of that index will hold all the y points
along that x line that are lit up.
*/
ArrayList[] bob;
//the pinging you-are-here circle
subPoint p = new subPoint();
void setup () {
myPort = new Serial(this, "COM4", 9600);
myPort.bufferUntil('\n');
size(512, 512);
xpos=ypos=0;
bob = new ArrayList[513];
for(int i=0;i<513;i++)
{
bob[i]=new ArrayList();
}
}
void serialEvent (Serial myPort) {
String data = myPort.readStringUntil('\n');
if(data!=null)
{
println(data);
data = trim(data);
int inputs[] = int(split(data,'-'));
if(inputs.length > 1)
{
xpos=inputs[0];
ypos=512-inputs[1];
if(!bob[xpos].contains(ypos)){ bob[xpos].add(ypos);}
pingX++;
pingY++;
if(pingX>45){pingX=pingY=0;}
if(inputs[2]==1){ clear(); }
}
}
}
void clear()
{
for(int i=0;i<513;i++)
{
bob[i].clear();
}
}
void draw () {
background(255);
stroke(0,255,0);
for(int i=0;i<513;i++)
{
if(!bob[i].isEmpty())
{
for(int j=0;j < bob[i].size();j++)
{
String s = bob[i].get(j).toString();
point(i,int(s));
}
}
}
p.update(xpos,ypos);
}
class subPoint {
void update(float x, float y)
{
stroke(255,0,0);
noFill();
ellipse(x+1,y+1,pingX/3,pingY/3);
}
}
The arduino code is relatively simple:
int aPin1 = 0;
int aPin2 = 1;
int aVal = 0;
int dPin = 2;
void setup()
{
Serial.begin(9600);
pinMode(dPin,INPUT);
}
void loop()
{
aVal = analogRead(aPin1);
aVal = map(aVal,0,1024,0,512);
Serial.print(aVal,DEC);
Serial.print('-');
aVal = analogRead(aPin2);
aVal = map(aVal,0,1024,0,512);
Serial.print(aVal, DEC);
Serial.print('-');
aVal = digitalRead(dPin);
Serial.println(aVal, DEC);
// pause for 10 milliseconds:
delay(10);
}