Learning   Examples | Foundations | Hacking | Links

Ejemplos > Comunicaciones

Mezclador de Color Virtual

Demuestra una técnica para el envío de varios valores de la placa Arduino al ordenador. En este caso, las lecturas de tres potenciómetros se utilizan para establecer los componentes rojo, verde y azul del color de fondo de un programa en Processing.

Circuito

Conectados sensores analógicos a las entradas analógicas 0, 1 y 2.

Este circuito utiliza tres sub-circuitos divisores de tensión para generar voltajes desde las resistencias de los sensores de fuerza. Un divisor de voltaje tiene dos resistencias en serie, dividiendo la tensión de forma proporcional a sus valores.

Haz click en la imagen para ampliarla

imagen desarrollada usando Fritzing. Para más circuitos de ejemplo, visita la página del proyecto Fritzing

Esquema

Haz click en la imagen para ampliarla

Código

 
     
     
       
  

     
     

Código de Processing


// Mezclador de Colores

// Este ejemplo toma una serie de valores separados por comas 
// desde 0 a 1023, lo mapea en el rango de 0 a 255, y los usa para 
// cambiar el color de fondo

// Created 2 Dec 2006
// by David A. Mellis
// modifed 14 Apr 2009
// by Tom Igoe
// Este código de ejemplo es de dominio público.


import processing.serial.*;

float redValue = 0;        // valor rojo
float greenValue = 0;      // valor verde
float blueValue = 0;       // valor azul

Serial myPort;

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

  // Lista todos los puertos serie disponibles
  println(Serial.list());
  // Doy por hecho que el primer puerto serie de la lista de mi mac
  // es siempre mi Arduino, por tanto abro Serial.list()[0].
  // Abre el puerto que estés usando.
  myPort = new Serial(this, Serial.list()[0], 9600);
  // no genera un serialEvent() a menos que se obtenga un caracter de nueva línea:
  myPort.bufferUntil('\n');
}

void draw() {
  // establece el color de fondo con los valores de los colores:
  background(redValue, greenValue, blueValue);
}

void serialEvent(Serial myPort) { 
  // recoge la cadena ASCII:
  String inString = myPort.readStringUntil('\n');

  if (inString != null) {
    // elimina cualquier espacio en blanco:
    inString = trim(inString);
    // divide la cadena por las comas y convierte las 
    // subcadenas resultantes en un array de enteros:
    float[] colors = float(split(inString, ","));
    // si la matriz tiene al menos tres elementos, ya sabes 
    // que los tienes todos. Ponga los números de las 
    // variables de los colores:
    if (colors.length >=3) {
      // map them to the range 0-255:
      redValue = map(colors[0], 0, 1023, 0, 255);
      greenValue = map(colors[1], 0, 1023, 0, 255);
      blueValue = map(colors[2], 0, 1023, 0, 255);
    }
  }
}

Salida

A medida que cambian los valores de los sensores analógicos el color de fondo cambiará:

Código de Max

El programa (patch) max se verá como este. El texto del código está enlazaco en la imagen.

Share