Social Icons

Processing - Primeiros passos para interação com Arduino

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

2 comentários:

  1. Com este programa você consegue acender os LEDs que foram ligados na placa Arduino pelo programa escrito no Processing?? é isso?

    ResponderExcluir
  2. aqui pra mim ta aparecendo que o import does not name type, por que será, OBS primeira fez que utilizo o processing.

    ResponderExcluir