Gráfico

Um exemplo simples de comunicação entre a placa Arduino e o computador: imprime-se o valor de uma entrada analógica. Chamamos de comunicação "serial" porque para ambos, Arduino e o computador, parece-lhes tal como uma comunicação serial tradicional mesmo que na verdade se use um cabo USB.

Você pode usar o Arduino serial monitor para visualizar os dados enviados, ou pode-se lê-los com Processing (veja abaixo), Flash, PD, Max/MSP etc.

Circuito

Uma entrada analógica conectada ao pino analógico 0.

Código


void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println(analogRead(0));
  delay(20);
}


Código Processing


// Gráfico
// por David A. Mellis
//
// Demonstra a leitura de dados vindos a partir da placa Arduino
// por meio do desenho de um gráfico dos valores recebidos.
//
// baseado em Analog In 
// por <a href="http://itp.jtnimoy.com">Josh Nimoy</a>. 

import processing.serial.*;

Serial port;
String buff = "";
int NEWLINE = 10;

// Armazene os últimos 64 valores recebidos de forma que possamos desenhá-los
int[] values = new int[64];

void setup()
{
  size(512, 256);

  println("Portas seriais disponíveis:");
  println(Serial.list());

  // Use a primeira porta da lista (número 0). Mude esta parte
  // conforme a porta correspondente a sua placa Arduino. O último
  // parâmetro (9600) é a velocidade de comunicação. Ela
  // deve corresponder ao valor passado ao Serial.begin() em seu
  // esboço Arduino.
  port = new Serial(this, Serial.list()[0], 9600);  

  // se você conhecer o nome da porta usada pela placa Arduino, 
  // também pode especificá-la diretamente, como segue.
  //port = new Serial(this, "COM1", 9600);
}

void draw()
{
  background(53);
  stroke(255);

  // Desenhe os valores guardados com uma linha entre os pontos.
  for (int i = 0; i < 63; i++)
    line(i * 8, 255 - values[i], (i + 1) * 8, 255 - values[i + 1]);

  while (port.available() > 0)
    serialEvent(port.read());
}

void serialEvent(int serial)
{
  if (serial != NEWLINE) {
    // Armazene todos os caracteres na linha
    buff += char(serial);
  } else {
    // O final de cada linha é marcado com dois caracteres: um retorno
    // de carro e um nova linha.  Chegamos aqui porque temos um nova linha,
    // mas ainda precisamos excluir o retorno de carro.
    buff = buff.substring(0, buff.length()-1);

    // Transforme a string em inteiro. Dividimos por 4 porque
    // as entradas analógicas vão de 0 a 1023, enquanto que as cores
    // em Processing vão apenas de 0 a 255.
    int val = Integer.parseInt(buff)/4;

    // Limpe o valor contido em "buff"
    buff = "";

    // Desloque os valores existentes para liberar espaço para novos valores.
    for (int i = 0; i < 63; i++)
      values[i] = values[i + 1];

    // Inclua ao vetor o valor recebido
    values[63] = val;
  }
}


Share