Um dos grandes baratos do Processing é poder interagir com o Arduino e gerar gráficos a partir do que está sendo lido através de sensores ou usar os gráficos para fazer uma interface mais amigável com o equipamento.
Eis a proposta aqui: usaremos um potenciômetro de 10K ohm para simular um sensor qualquer e a partir das leituras obtidas com ele em um Arduino iremos criar gráficos com o Processing.
Primeiro vamos montar a experiência com o Arduino:
Ligue o potenciômetro ao Arduino, os dois pinos laterais são ligados ao 5V e a GND do Arduino. O lado do 5V e do GND mais ou menos tanto faz, apenas o lado do GND será o zero do potenciômetro e o lado onde estiver ligado do 5V será o 1024 (leitura máxima analógica).
Ligue o pino central do potenciômetro ao pino analógico 0 (A0) do Arduino.
Agora vamos escrever e carregar o seguinte código ao Arduino:
{code}
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(A0));
delay(10);
}
{/code}
Com esse código lemos o pino analógico 0 (A0) do Arduino e escrevemos os valores lidos na porta serial.
Verifique o funcionamento via Serial Monitor, movimente o potenciômetro e veja os valores lidos:
Antes de continuar recomendo uma olhada em Como realizar interação entre o Arduino e o Processing e em Processing: o que é e para que serve?.
Vamos então ao código do Processing:
{code}
import processing.serial.*;
Serial serial;
void setup () {
size(800, 600);
serial = new Serial(this, "COM3", 9600);
serial.bufferUntil('\n');
}
void draw () {
}
void serialEvent (Serial myPort) {
String leitura = serial.readStringUntil('\n');
float valor = float(trim(leitura));
background(color(255));
ellipse (width/2,height/2,valor,valor);
}
{/code}
Com esse código lemos a entrada de dados pela porta serial coletando os números enviados pelo Arduino e usamos esses números para determinar o tamanho do círculo a ser desenhado.
Com serial = new Serial(this, "COM3", 9600); determinamos que a porta serial a ser utilizada é a COM3 (verifique em qual seu Arduino está conectado) e a taxa de transmissão em 9600bps.
Com serial.bufferUntil('\n'); aguardamos que seja recebido um ENTER (caractere \n) para dar continuidade ao programa.
Nada é feito na função draw() tudo acontece na função predefinida serialEvent() que é chamada apenas quando há um evento pela interface serial, como parâmetro essa função recebe qual porta serial deve monitorar.
Em String leitura = serial.readStringUntil('\n'); concatenamos todos os caracteres recebidos pela porta serial na variável até que o caractere recebido seja um ENTER (próxima linha);
Com float valor = float(trim(leitura)); convertemos a string recebida pela porta serial em um número do tipo float.
Depois é só desenhar a elipse com o tamanho determinado pelo número enviado pelo Arduino. Usamos as constantes width que retorna o comprimento da janela e width que retorna a altura, com elas determinamos o meio da tela como centro para a elipse.
Execute e mova o potenciômetro ligado ao Arduino:
{youtube}h-4vNAJW6LE{/youtube}