Processing + Arduino | Interação Simples
Olá, gostaria de pedir desculpas pelo tempo sem atualização. Tanto o Processing como o Arduino já possuem bibliotecas prontas para uma comunicação eficaz entre eles, e neste post veremos como começar a utilizar tais recursos.Para começar faça o download da biblioteca Arduino para o processing, já que ela não é nativa do programa.
processing-arduino-0017.zip
Extraia o arquivo zip dentro da pasta "libraries" no Processing, para que você possa utilizá-la.
A seguir, no Arduino, abra o exemplo "Standard Firmata" e faça o upload na sua placa, este exemplo contem o Firmware necessário para interagir diretamente PC-Arduino, este programa é uma ligação entre todos os recursos do arduino e a sua comunicação serial, assim você poderá acessar "diretamente" os valores nas suas entradas digitais e até mesmo escrever valores nas saidas do Arduino interagindo apenas com o seu PC, em outras palavras, você transforma o arduino em um "periférico" do seu pc e pode controlar ele diretamente.
Voltando.
Se você já fez o upload do Firmata para a sua placa, ela não precisa de mais nada para funcionar! Agora vamos a um exemplo básico.
Leitura digital utilizando o Firmata e o Processing
Neste exemplo vamos ver como acessar as portas do Arduino para utilizá-las como saídas para nosso programa Processing. Ligue alguns Leds nos pinos digitais do Arduino, nunca use os pinos 0 e 1 pois eles são ligações diretas com a comunicação serial, que neste caso será obrigatoriamente usada pela placa para conexão com o PC, independente do meio usado (usb, Bluetooth, XBee, rádio, etc). Continuando...
Exemplo de ligações.
Como já disse, você poderá ligar em qualquer pino exceto os pinos 0 e 1.
A seguir abra o Processing e abra o exemplo arduino_output que acompanha os arquivos da biblioteca, deverá ser como este:
import processing.serial.*; // Biblioteca serial nativa do processing import cc.arduino.*; // Biblioteca de interação com o arduino Arduino arduino; // Cria um novo objeto arduino para interação com a placa color off = color(4, 79, 111); //Declara as cores usadas no exemplo color on = color(84, 145, 158); int[] values = { Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW }; //Cria um array para armazenar os valores a serem passados para a placa //Arduino.LOW representa os valor LOW na placa arduino sendo acessada pela biblioteca //Arduino void setup() { size(470, 200);//Tamanho da tela println(Arduino.list());//Esse é um comando usado apenas para saber // qual a porta utilizada pela placa. arduino = new Arduino(this, Arduino.list()[0], 57600); //Construtor //do objeto arduino, onde Arduino.list()[0] é a porta usada e 57600 é a Baud //da porta serial //Este For é uma parte do código que devemos prestar atenção //pois nele estamos utilizando código do arduino. //tente substituir este bloco por: /* arduino.pinMode(2,Arduino.OUTPUT); arduino.pinMode(3,Arduino.OUTPUT); arduino.pinMode(4,Arduino.OUTPUT); etc */ for (int i = 0; i <= 13; i++) arduino.pinMode(i, Arduino.OUTPUT); } //Percebeu a semelhança? com o código do arduino? //Pois é... //Este bloco desenha a interface, não vem ao caso agora void draw() { background(off); stroke(on); for (int i = 0; i <= 13; i++) { if (values[i] == Arduino.HIGH) fill(on); else fill(off); rect(420 - i * 30, 30, 20, 20); } } //Esta função é um presset do Processing, pode ser chamada de Evento // Ela é chamada SEMPRE que um botão do mouse é pressionado. void mousePressed() { int pin = (450 - mouseX) / 30;//Utiliza a posição X do mouse para //saber que botão foi clicado //Perceba que aqui ele não utiliza a posição Y //mas vamos deixar assim pra simplificar. //Este bloco if simplesmente comuta os valores if (values[pin] == Arduino.LOW) { // A parte legal esta aqui!! // pra quem já conhece o arduino e POO não tem o que explicar // se não vamos lá: // aqui você manda a sua placa, representada aqui pelo objeto "arduino" // e manda ele escrever numa saída digital // perceba que a variável pin é uma variável do programa, e não da placa arduino.digitalWrite(pin, Arduino.HIGH); values[pin] = Arduino.HIGH; } else { arduino.digitalWrite(pin, Arduino.LOW);//idem values[pin] = Arduino.LOW; } }
Com este programa você consegue acender os LEDs que foram ligados na placa Arduino pelo programa escrito no Processing?? é isso?
ResponderExcluiraqui pra mim ta aparecendo que o import does not name type, por que será, OBS primeira fez que utilizo o processing.
ResponderExcluir