![]() |
|
Al workshop di domenica 16 maggio 2010 vari appassionati chiedevano come fare a rendere graficamente un dato acquisito da arduino, e poterlo rappresentare in un cartesiano. In questo tutorial vi mostrero' l' "Hello World" alla possibilità di interfaccia tra Processing e Arduino. In questo caso viene utilizzato per visualizzare il dato output di un Accelerometro Adx (solo uno dei 3 assi).
Come funziona
Nel nostro codice di Arduino chiederemo a ogni loop di printare una linea con il dato acquisito dall'accelerometro. In Processing inizizializiamo la seriale e cerchiamo tutto cio' che arriva dalla seriale, suddiviso da "/n", cioè da "a capo". Con questa semplice operazione è possibile far comunicare i due programmi. Chiaramente poi ci sono un paio di funzioni fondamentali che servono per ignorare gli eventuali buchi nella comunicazione (puo' capitare un po' di lag).
Ogni linea letta viene trasformata nel valore y di un punto. Grazie a questo sistema è possibile disegnare una curva, come potete vedere nel video, che rappresenta il movimento a cui è stato sottoposto l'accelerometro (o qualsiasi altro input chiaramente).
Il codice
import processing.serial.*;
Serial myPort; // La mia porta seriale
int xPos = 0; // Posizione orizzontale grafico
void setup () {
size(1000, 200);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil('\n'); // buffer quando va a capo
background(0);
}
void draw () {
}
void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);
stroke(50,200,20);
line(0, 100 , 1000, 100); // linea di 0
point(xPos, 100 - inByte);//punto
if (xPos >= width) { //se xPos >= larghezza
xPos = 0;
background(0);
} else {
// incrementa posizione orizzonale
xPos++;
}
}
}
