Comunicação entre o Arduino e o Processing
Para fazer o Arduino se comunicar com o Processing precisamos pegar a biblioteca que é responsável por criar o caminho de comunicação entre os dois. Para que a biblioteca funcione corretamente é necessário ter rodando no Arduino o firmware Firmata. É possível realizar a comunicação entre os dois fazendo uso da biblioteca Serial do Processing e do Arduino, mas isso da mais trabalho e não me parece elegante.
Faça o download da biblioteca e descompacte-a dentro da pasta libraries que se encontra na pasta Scketchbook do seu Processing. Agora abra a IDE do Arduino e faça o upload do exemplo que se encontra em: LIbrary-Firmata>StandardFirmata para a placa.
No Processing digite o seguinte exemplo para o teste inicial:
import processing.serial.*; import cc.arduino.*; Arduino arduino; int ledPin = 13; void setup() { arduino = new Arduino(this, Arduino.list()[0]): arduino.pinMode(ledPin, Arduino.OUTPUT); } void draw() { arduino.digitalWrite(ledPin, Arduino.HIGH); delay(1000); arduino.digitalWrite(ledPin, Arduino.LOW); delay(1000); }
Rode este programa e se tudo ocorreu como planejado o led que está conectado no pino 13 do Arduino deve começar a piscar. Maiores detalhes sobre as funções da biblioteca do Processing podem ser encontradas na sua página no Arduino Playground.
Vamos começar a brincadeira!
Vou usar um circuito simples com LDR (Resistor Variável Conforme Incidência De Luz) que é mostrado na página 31 do Arduino Booklet para interagir com os programas escritos no Processing.

Lendo os valores do sensor
import processing.serial.*; import cc.arduino.*; Arduino arduino; int pino_sensor_ldr = 0; int valor_capturado_ldr = 0; void setup() { println(Arduino.list()); // cria um novo objeto arduino arduino = new Arduino(this, Arduino.list()[0]); // seta os pinos do arduino arduino.pinMode(pino_sensor_ldr, Arduino.INPUT); } void draw() { // captura o valor do sensor valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr); // imprime esse valor no terminal do processing println(valor_capturado_ldr); }
Alterando diâmetro de um circulo

import processing.serial.*; import cc.arduino.*; Arduino arduino; int pino_sensor_ldr = 0; int valor_capturado_ldr = 0; void setup() { size(400,400); background(255, 204, 0); ellipseMode(CENTER); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0]); arduino.pinMode(pino_sensor_ldr, Arduino.INPUT); } void draw() { // captura o valor do sensor valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr); background(255, 204, 0); // usa o valor capturado para alterar o diâmetro do círculo ellipse(200, 200, valor_capturado_ldr*2, valor_capturado_ldr*2); }
Gerando sons e alterando a forma de onda do sinal
Alterei o exemplo SineWaveSignal do Processing que originalmente muda as formas de onda com base nos valores capturados da posição onde o cursor do mouse se encontra. Agora ele funciona com um LDR
import ddf.minim.*; import ddf.minim.signals.*; import processing.serial.*; import cc.arduino.*; Minim minim; AudioOutput out; // SineWave é uma subclasse de Oscilador, que é uma //classe abstracta que implementa a interface AudioSignal SineWave sine; Arduino arduino; int pino_sensor_ldr = 0; int valor_capturado_ldr = 0; void setup() { size(512, 200, P2D); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0]); arduino.pinMode(pino_sensor_ldr, Arduino.INPUT); minim = new Minim(this); // cria um line out para o Minin out = minim.getLineOut(Minim.STEREO); // cria um sinal oscilante de 440Hz e 0.5 de amplitude sine = new SineWave(440, 0.5, out.sampleRate()); // seta a velocidade do portamento para 200millisegundos sine.portamento(200); // adiciona o sinal ao line out out.addSignal(sine); } void draw() { background(0); stroke(255); valor_capturado_ldr = arduino.analogRead(pino_sensor_ldr); // muda a frequencia do sinal float freq = map(valor_capturado_ldr, 0, height, 1500, 60); sine.setFreq(freq); float pan = map(valor_capturado_ldr, 0, width, -1, 1); sine.setPan(pan); // desenha a forma de onda for(int i = 0; i < out.bufferSize() - 1; i++) { float x1 = map(i, 0, out.bufferSize(), 0, width); float x2 = map(i+1, 0, out.bufferSize(), 0, width); line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50); line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50); } } void stop() { out.close(); minim.stop(); super.stop(); }
Alguém já fez algum projeto usando essa interação entre o Arduino e o Processing?

[...] Arduino Brasil » Comunicação entre o Arduino e o Processing (tags: http://www.arduino.com.br 2009 mes1 dia8 arduino processing blog_post) [...]
Tá demais isso aqui!
Boa, Alan
Rodei o blog procurando um e-mail de contato e não achei.
Me manda uma mensagem, quero te passar uma informação comercial (SPAM nos comentários não vale, né?)
vlw
Me ajude pelo amor de Deuss !!!!! rsrsrsr
Já usou o sensor ping da tatuíno ? Comprei um mas até agora nada de conseguir fazer funcionar.
Se tiver usado me passa uma dica de como receber informações dele.
Tá showw aquii !!
Olá, Samuel,
eu nunca usei o Tatuino. Alguém aqui usou? Algum comentário?