sexta-feira, 7 de agosto de 2015

Interface gráfica para o Arduino com Processing

 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:
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;
 }
}
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.

 
← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário