Para ter uma noção desde o início do que é Processing acesse o tutorial Processing: o que é e para que serve? e Como realizar interação entre o Arduino e o Processing.
Bom , vamos lá! A ideia é criar uma interface gráfica simples usando Processing para manipular o Arduino, no caso o LED do pino 13.
Com o Processing baixado e funcionando, faça download da biblioteca processing-arduino que pode ser encontrada em http://playground.arduino.cc/uploads/Interfacing/processing-arduino.zip e também uma cópia em http://www.seucurso.com.br/downloads/processing-arduino.zip
Descompacte o arquivo baixado, você terá uma pasta chamada arduino, copie-a (ou mova) para dentro da pasta libraries do Sketchbook do Processing, que normalmente fica dentro da pasta Meus Documentos sob o nome Processing.
Antes de continuar será necessário enviar para o Arduino um firmware que permita a comunicação entre o Processing e o hardware Arduino. Ao firmware que faz essa tarefa é dado o nome Firmata.
Para fazermos nosso primeiro teste abra o ambiente Arduino e abra o exemplo StandardFirmata que está no menu File > Examples > Firmata > StandardFirmata
Faça upload desse Firmata para o Arduino:
Isso fará com que seja carregado no Arduino um Firmata genérico que permitirá que controlemos o Arduino através do Processing. Com um pouco de estudo é possível criar Firmata personalizados para aplicações específicas.
Ok, o Arduino está preparado para lidar com o Processing a partir do Firmata padrão fornecido com o próprio ambiente, agora abra o Processing e vamos tentar o seguinte código:
{code}
import processing.serial.*;
import cc.arduino.*;
color selecionado = color(0);
color n_selecionado = color(255);
int ledPin = 13;
boolean ledOn = false;
Arduino arduino;
void setup() {
size(300,100);
println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[1], 57600);
arduino.pinMode(ledPin, Arduino.OUTPUT);
textSize(26);
}
void draw() {
if(mouseX >= 10 && mouseX <= 100 &&
mouseY >= 10 && mouseY <= 50) {
fill(selecionado);
rect(10,10,100,50);
fill(n_selecionado);
text("ON",10,10,100,50);
} else {
fill(n_selecionado);
rect(10,10,100,50);
fill(selecionado);
text("ON",10,10,100,50);
}
if(mouseX >= 160 && mouseX <= 260 &&
mouseY >= 10 && mouseY <= 50) {
fill(selecionado);
rect(160,10,100,50);
fill(n_selecionado);
text("OFF",160,10,260,50);
} else {
fill(n_selecionado);
rect(160,10,100,50);
fill(selecionado);
text("OFF",160,10,260,50);
}
if(ledOn) arduino.digitalWrite(ledPin,Arduino.HIGH);
else arduino.digitalWrite(ledPin,Arduino.LOW);
}
void mousePressed() {
if (mouseX >= 10 && mouseX <= 100 &&
mouseY >= 10 && mouseY <= 50) {
ledOn = true;
}
if (mouseX >= 160 && mouseX <= 260 &&
mouseY >= 10 && mouseY <= 50) {
ledOn = false;
}
}
{/code}
Executando, com o Arduino conectado, temos a seguinte tela inciado:
Quando passar o mouse sobre o botão ON:
Quando passar o mouse sobre o botão OFF:
Se você clicar sobre o botão ON o LED do pino 13 do Arduino acenderá, quando clicar sobre o botão OFF ele apagará.
O que fizemos:
Com arduino = new Arduino(this, Arduino.list()[1], 57600); iniciamos a comunicação com o Arduino com velocidade de 57.600bps.
Com arduino.pinMode(ledPin, Arduino.OUTPUT); ajustamos que o pino ledPin (13) será utilizado para saída (OUTPUT).
Com fill(selecionado); e rect(10,10,100,50); criamos um retângulo nas coordenadas X,Y 10,10 com comprimento de 100 pixeis e a altura de 50 pixeis. O retângulo será preenchido com a cor determinada na função fill, onde a variável selecionado carrega a cor branca (255).
Com fill(n_selecionado); e text("ON",10,10,100,50); escrevemos o texto ON na cor da variável n_selecionado (preto – 0) fixando que a área máxima a ser ocupada pelo texto é a mesma do retângulo que forma o botão.
As constantes mouseX e mouseY são predeterminadas e retorna a posição X e Y do mouse. Dessa forma fazemos condições IF que expressam: se o ponteiro do mouse estiver dentro do retângulo pinte-o de preto, caso contrário, pinte-o de branco.
A função void mousePressed() também é predeterminada pela linguagem e é executada apenas quando há um clique do mouse. Dessa forma fazemos condições IF que expressam: se ao clicar o mouse dentro da área dos retângulos deve-se setar a variável que determinará se o LED do Arduino deve estar ligado ou não.