Misturador de cores virtual

Demonstra uma técnica de transmitir valores múltiplos a partir da placa Arduino, ao computador. Neste caso, as leituras de três potenciômetros são usadas para ajustar as componentes vermelha, azul e verde do fundo de um esboço Processing.

Circuito

Potenciômetros conectados aos pinos analógicos 0, 1 e 2.

Código

int redPin = 0;
int greenPin = 1;
int bluePin = 2;

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

void loop()
{
  Serial.print("R");
  Serial.println(analogRead(redPin));
  Serial.print("G");
  Serial.println(analogRead(greenPin));
  Serial.print("B");
  Serial.println(analogRead(bluePin));
  delay(100);
}

Código Processing

/**
 * Misturador de Cores
 * por David A. Mellis
 *
 * Criado em 2 Dezembro 2006
 *
 * baseado em Analog In 
 * por <a href="http://itp.jtnimoy.com">Josh Nimoy</a>. 
 * 
 * Criado em 8 Fevereiro 2003
 * Atualizado em 2 Abril 2005
 */

import processing.serial.*;

String buff = "";
int rval = 0, gval = 0, bval = 0;
int NEWLINE = 10;

Serial port;

void setup()
{
  size(200, 200);

  // Imprima uma lista no caso de a COM1 não funcionar
  println("Portas seriais disponíveis:");
  println(Serial.list());

  //port = new Serial(this, "COM1", 9600);
  // Use a primeira porta disponível
  port = new Serial(this, Serial.list()[0], 9600);
}

void draw()
{
  while (port.available() > 0) {
    serialEvent(port.read());
  }
  background(rval, gval, bval);
}

void serialEvent(int serial) 
{ 
  // Se a variável "serial" não for igual ao valor de um caracter
  // nova linha, inclua o valor à variável "buff". Se for igual, 
  // guarde o valor do buffer na variável "val".
  if(serial != NEWLINE) { 
    buff += char(serial);
  } else {
    // O primeiro caractere diz-nos a qual cor se refere
    char c = buff.charAt(0);
    // Remova-o da string
    buff = buff.substring(1);
    // Descarte o retorno de carro ao final do buffer
    buff = buff.substring(0, buff.length()-1);
    // Converta a string para inteiro
    if (c == 'R')
      rval = Integer.parseInt(buff);
    else if (c == 'G')
      gval = Integer.parseInt(buff);
    else if (c == 'B')
      bval = Integer.parseInt(buff);
    // Esvazie "buff"
    buff = "";
  }
}

Share