Processing

De Wikitronica
Revisión del 15:01 18 nov 2013 de JCaceres (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar


Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.

Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital. Fue iniciado por Ben Fry y Casey Reas a partir de reflexiones en el Aesthetics and Computation Group del MIT Media Lab dirigido por John Maeda.

Processing es desarrollado por artistas y diseñadores como una herramienta alternativa al software propietario. Puede ser utilizado tanto para aplicaciones locales así como aplicaciones para la web (Applets).

Se distribuye bajo la licencia GNU GPL.

Alcances

Al estar basado en Java, puede heredar todas sus funcionalidades, convirtiéndose en una herramienta poderosa a la hora de encarar proyectos complejos.

Comunicaciones por Puerto Serial

Como Processing puede usar librerías al estilo de java, hay una que se necesitará para la programación del puerto y permitir abrir un gran espectro de posibilidades (como comunicación con micro controladores), esta es processing.serial y se puede crear un sketch de la siguiente manera:

import processing.serial.*;

A continuación se debe crear un objeto del tipo Serial (o varias si vamos a tratar con más de un puerto serie).

Serial puerto;

Después inicializarlo con los siguientes parámetros.

puerto = new Serial(this, Serial.list()[0], 115200);

El constructor de la clase Serial tiene varias maneras de ser inicializado:

Serial(Padre) Serial(Padre, Velocidad) Serial(Padre, Puerto) Serial(Padre, Puerto, Velocidad) Serial(Padre, Puerto, Velocidad, Paridad, Palabra, Parada)

Los parámetros son:

  • Padre: Se suele usar "this" siempre.
  • Velocidad: La velocidad en b.p.s. a la que se quiere enviar y recibir datos: 9600 es la que toma por defecto si no se le indica otra cosa.
  • Puerto: Nombre del puerto de comunicaciones. “COM1″ es el que toma por defecto, pero puede ser otro de Windows. En Linux o Mac suele ser /dev/tty*
  • Paridad: ‘N’ para ninguna, ‘E’ para paridad par, ‘O’ para paridad impar. ‘N’ es la que se toma por defecto.
  • Palabra: Número de bits que conforman una unidad de datos. 8 es el que se toma por defecto.
  • Parada: Número de bits de parada (stop). Puede ser 1.0, 1.5, or 2.0, siempre en formato float. 1.0 es el que se toma por defecto.

Para el caso específico de querer utilizar el módulo del MC9S08QE128, estos parámetros deben corresponder con los configurados.

Si no se sabe a priori qué puertos serie tenemos en nuestro ordenador, podemos imprimir un listado de los disponibles.

println(Serial.list());

Como se trata simplemente de un "array" de cadenas, podemos acceder al valor de cualquier de ellas y pasárselo como argumento al constructor de Serial, tal y como se ha expuesto lineas atrás en la creación del objeto.

A partir de aquí, y si el puerto se ha podido abrir sin problemas, podemos enviar y recibir los datos.

Para enviar datos desde Processing al puerto serie hay que usar el método "write" del objeto que hayamos creado.

puerto.write(11);
puerto.write("hola");
puerto.write('e');

Se puede enviar tipos "byte", "char", "int", "array" de "bytes" o "cadenas".

Para recibir los datos se tienen dos posibilidades.

1) Comprobar dentro del método Draw si hay datos disponibles para su lectura, leerlos y procesarlos:

while (puerto.available() > 0)

{

dato = puerto.read();

}

El método "available" devuelve el número de bytes que hay pendientes por leer en el "buffer". El método "read" nos devuelve un valor de "0" a "255" del primer byte de la cola FIFO del buffer, o "-1" si no hay dato disponible. Además de "read" hay otros métodos para recuperar los datos: readChar, readBytes, readBytesUntil, readString, readStringUntil.

2) Definir en el método "Setup" cuántos bytes queremos leer cada vez, esperar a que se active el evento "serialEvent", y dentro de este leer los bytes.

En Setup:

puerto.buffer(2);

En el cuerpo principal del sketch:

void serialEvent(Serial puerto_serie)
{

valor1 = puerto_serie.read();

valor2 = puerto_serie.read();

}

Esta técnica es mucho más optima que la primera. El rendimiento del método "Draw" para leer los datos del puerto serie y dibujarlos será menor que si el método "Draw" sólo se centra en leer las variables y dibujar en consecuencia, dejando al evento "serialEvent" que se encargue de poblar las variables con los datos recibidos por el puerto serie. Para que funcione esta técnica, se debe informar al objeto Serial de cuantos bytes se deben leer antes de que se dispare el eventoserialEvent, esto se hace usando el método "buffer" indicando los bytes a leer. Dentro del "eventoserialEvent" se deben leer tantos bytes como se especificaron con el método buffer. Si se está trabajando con más de un puerto serie se puede usar el único parámetro del evento "serialEvent" para distinguir desde qué puerto serie se han recibido los bytes.

if(puerto_serie == puerto)

Si se desea escribir los datos que se reciben a un fichero se debe crear una variable global del tipo "PrintWriter".

PrintWriter archivo;

Luego en el método "Setup" se debe crear el objeto "PrintWriter" indicando en qué archivo guardar los datos.

archivo = createWriter("positions.txt");

Finalmente, ya sea dentro del método "Draw" o del evento "serialEvent" (recomendado) se escriben los datos al archivo:

archivo.print(valor1);
archivo.print(',');
archivo.println(valor2);
archivo.flush();

Bibliografía

  • Oscar: «Processing y el puerto serie» en WordPress[1]
  • Colaboradores de Wikipedia. Processing [en línea]. Wikipedia, La enciclopedia libre, 2013 [fecha de consulta: 20 de marzo del 2013]. Disponible en < [2]>.

Enlaces externos

Contributors

Ddtdanilo, JCaceres, Racuna