
O título deste post pode parecer um tanto assustador no começo, porém lembre-se de que nos temos um companheiro e tanto para este feito que é o PROCESSING! Vocês se lembram de um post que eu já citei sobre ele? O que ele irá fazer? Ele irá servir de base para fazermos as amostras dos dados na tela do PC!

Vamos usar um controle do nintendo WII neste tutorial, por que possui varios sensores que podemos escolher (entre eles o acelerometro) e faciilmente o conctamos ao Arduino para receber dados.
Uma vez que os sensores transmitiram dados com sucesso para a porta serial, nos podemos usar estes dados para criar um gráfico, criamos uma nova perspectiva para ele. Para começar, iremos pegar o valor de uma variavel vinda pela porta serial e jogar no grafico, o resultado deve ficar mais ou menos assim:

Código (Sketch):
//Este exemplo le em um simples byte valores de 0 a 255 e faz o grafico.
/////////////////////////////////////////
//Código comunicação serial básica
//por Chang Soo Lee
//ITP, NYU
//Criado em 11/27/2005
/////////////////////////////////////////
import processing.serial.*;
Serial myPort;
int serial = 1;
PFont font;
int numH = 370;
void setup () {
size(270, 440);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
// Carrega a fonte
// Diretrorio de seu sketch. Use Tools > Create Font
// para criar uma distributable bitmap font
// para fontes de vetor use a função createFont()
font = loadFont("ArialMT-48.vlw");
smooth();
}
void draw () {
background(255);
if (myPort.available() > 0) {
serial = myPort.read();
serialEvent();
}
line(70,70,70,370);
line(70,370,200,370);
fill(0);
textFont(font, 11);
text("Sensor\nValue",22,80);
text("Analog Input", 95, 390);
text(serial,25,110);
noFill();
}
void serialEvent(){
if(serial>1){
rect(120,numH-serial, 20, serial);
}
}
Similar ao anterior agora vamos fazer o gráfico de várias variaveis ao mesmo tempo. É um pouco mais complicado pois nós temos que separar as variaveis. Para aprender como fazer isto sugiro que deem uma olhada sobre “transmissao serial multivariavel” no site do Arduino (www.arduino.cc).

Código:
// 3 sensores analogicos formatados e enviados pelo arduino. processing pega estes dados e faz o grafico.
// From ITP at NYU – //http://itp.nyu.edu/physcomp/
//código que vai no arduino!!!!
int an1, an2, an3 = 0;
void setup() {
Serial.begin(19200);
}
void loop() {
an1 = analogRead(0);
delay(5);
an2 = analogRead(1);
delay(5);
an3 = analogRead(2);
Serial.print("X");
Serial.println(an1,DEC);
Serial.print("Y");
Serial.println(an2,DEC);
Serial.print("Z");
Serial.println(an3,DEC);
delay(15);
}
//Código que vai no PROCESSING!!!!
import processing.serial.*;
String buff = "";
int val = 0;
int NEWLINE = 10;
int xPos,yPos,zPos = 0;
int displaySize = 2;
int an1, an2, an3;
Serial port;
void setup(){
background(80);
size(800,600);
smooth();
port = new Serial(this, Serial.list()[0], 19200);
}
void draw(){
// new background over old
fill(80,5);
noStroke();
rect(0,0,width,height);
// deixa uma pequena area em frente dos novos dados
fill(80);
rect(xPos+displaySize,0,50,height);
// Verifica serial e processa
while (port.available() > 0) {
serialEvent(port.read());
}
}
void serialEvent(int serial) {
if(serial != '\n') {
buff += char(serial);
} else {
int curX = buff.indexOf("X");
int curY = buff.indexOf("Y");
int curZ = buff.indexOf("Z");
if(curX >=0){
String val = buff.substring(curX+1);
an1 = Integer.parseInt(val.trim());
xPos++;
if(xPos > width) xPos = 0;
sensorTic(xPos,an1+20);
}
if(curY >=0){
String val = buff.substring(curY+1);
an2 = Integer.parseInt(val.trim());
yPos++;
if(yPos > width) yPos = 0;
sensorTic(yPos,an2-255);
}
if(curZ >=0){
String val = buff.substring(curZ+1);
an3 = Integer.parseInt(val.trim());
zPos++;
if(zPos > width) zPos = 0;
sensorTic(zPos,an3-255);
}
// Limpa valor de "buff"
buff = "";
}
}
void sensorTic(int x, int y){
stroke(0,0,255);
fill(0,0,255);
ellipse(x,y,displaySize,displaySize);
}
Em breve postarei como adaptar o controle do WII em seu Arduino.
0 comentários:
Postar um comentário