Diferencia entre revisiones de «Processing»

De Wikitronica
Saltar a: navegación, buscar
 
(No se muestran 2 ediciones intermedias de otro usuario)
Línea 6: Línea 6:
 
  '''Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.'''</div>
 
  '''Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.'''</div>
  
'''Processing''' es un [[lenguaje de programación]] y [[entorno de desarrollo integrado]] [[Software de código abierto|de código abierto]] basado en [[Lenguaje de programación Java|Java]], de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos [[multimedia]] e [[interactivo]]s de diseño digital. Fue iniciado por [[Ben Fry]] y [[Casey Reas]] a partir de reflexiones en el [http://acg.media.mit.edu/ Aesthetics and Computation Group] del MIT Media Lab dirigido por [[John Maeda]].
+
'''Processing''' es un [[lenguaje de programación]] y [[entorno de desarrollo integrado]] [[Software de código abierto|de código abierto]] basado en [[Lenguaje de programación Java|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 [http://acg.media.mit.edu/ 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).
 
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).
Línea 20: Línea 20:
 
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:
 
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:
  
<code>
+
<syntaxhighlight lang="java">
 
import processing.serial.*;
 
import processing.serial.*;
</code>
+
</syntaxhighlight>
 
+
  
 
A continuación se debe crear un objeto del tipo Serial (o varias si vamos a tratar con más de un puerto serie).
 
A continuación se debe crear un objeto del tipo Serial (o varias si vamos a tratar con más de un puerto serie).
  
 
+
<syntaxhighlight lang="java">
<code>
+
 
Serial puerto;
 
Serial puerto;
</code>
+
</syntaxhighlight>
 
+
  
 
Después inicializarlo con los siguientes parámetros.
 
Después inicializarlo con los siguientes parámetros.
  
<code>
+
<syntaxhighlight lang="java">
 
puerto = new Serial(this, Serial.list()[0], 115200);
 
puerto = new Serial(this, Serial.list()[0], 115200);
</code>
+
</syntaxhighlight>
  
 
El constructor de la clase Serial tiene varias maneras de ser inicializado:
 
El constructor de la clase Serial tiene varias maneras de ser inicializado:
 
  
 
Serial(Padre)
 
Serial(Padre)
Línea 47: Línea 43:
 
Serial(Padre, Puerto, Velocidad)
 
Serial(Padre, Puerto, Velocidad)
 
Serial(Padre, Puerto, Velocidad, Paridad, Palabra, Parada)
 
Serial(Padre, Puerto, Velocidad, Paridad, Palabra, Parada)
 
 
  
 
'''Los parámetros son:'''
 
'''Los parámetros son:'''
  
* Padre: Se suele usar this siempre.
+
* 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.
 
* 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*
+
 
 +
* 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.
 
* Paridad: ‘N’ para ninguna, ‘E’ para paridad par, ‘O’ para paridad impar. ‘N’ es la que se toma por defecto.
Línea 64: Línea 59:
  
 
Para el caso específico de querer utilizar el módulo del [[MC9S08QE128]], estos parámetros deben corresponder con los configurados.
 
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.
 
Si no se sabe a priori qué puertos serie tenemos en nuestro ordenador, podemos imprimir un listado de los disponibles.
  
<code>
+
<syntaxhighlight lang="java">
 
println(Serial.list());
 
println(Serial.list());
</code>
+
</syntaxhighlight>
  
 
+
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.
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.
 
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.
+
Para enviar datos desde Processing al puerto serie hay que usar el método "write" del objeto que hayamos creado.
 
+
 
+
  
<code>
+
<syntaxhighlight lang="java">
 
puerto.write(11);
 
puerto.write(11);
 
puerto.write("hola");
 
puerto.write("hola");
 
puerto.write('e');
 
puerto.write('e');
</code>
+
</syntaxhighlight>
  
 
+
Se puede enviar tipos "byte", "char", "int", "array" de "bytes" o "cadenas".
Se puede enviar tipos byte, char, int, array de bytes o cadenas.
+
  
 
Para recibir los datos se tienen dos posibilidades.
 
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:'''
 
'''1) Comprobar dentro del método [[Draw]] si hay datos disponibles para su lectura, leerlos y procesarlos:'''
  
 
+
<syntaxhighlight lang="java">
 
+
<code>
+
 
while (puerto.available() > 0)
 
while (puerto.available() > 0)
  
Línea 108: Línea 93:
 
}
 
}
  
</code>
+
</syntaxhighlight>
 
+
 
+
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 cuantos bytes queremos leer cada vez, esperar a que se active el evento serialEvent, y dentro de este leer los bytes.'''
+
  
 +
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:
 
En Setup:
  
<code>
+
<syntaxhighlight lang="java">
 
puerto.buffer(2);
 
puerto.buffer(2);
</code>
+
</syntaxhighlight>
  
En el cuerpo principal del sketch:
+
En el cuerpo principal del ''sketch'':
  
<code>
+
<syntaxhighlight lang="java">
 
void serialEvent(Serial puerto_serie)
 
void serialEvent(Serial puerto_serie)
 
{
 
{
Línea 138: Línea 116:
  
 
}
 
}
</code>
+
</syntaxhighlight>
  
 +
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.
  
 
+
<syntaxhighlight lang="java">
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.
+
 
+
 
+
<code>
+
 
if(puerto_serie == puerto)
 
if(puerto_serie == puerto)
</code>
+
</syntaxhighlight>
  
 +
Si se desea escribir los datos que se reciben a un fichero se debe crear una variable global del tipo "PrintWriter".
  
 
+
<syntaxhighlight lang="java">
Si se desea escribir los datos que se reciben a un fichero se debe crear una variable global del tipo PrintWriter.
+
 
+
 
+
<code>
+
 
PrintWriter archivo;
 
PrintWriter archivo;
</code>
+
</syntaxhighlight>
  
 +
Luego en el método "Setup" se debe crear el objeto "PrintWriter" indicando en qué archivo guardar los datos.
  
Luego en el método Setup se debe crear el objeto PrintWriter indicando en qué archivo guardar los datos.
+
<syntaxhighlight lang="java">
 
+
 
+
<code>
+
 
archivo = createWriter("positions.txt");
 
archivo = createWriter("positions.txt");
</code>
+
</syntaxhighlight>
 
+
 
+
Finalmente, ya sea dentro del método Draw o del evento serialEvent (recomendado) se escriben los datos al archivo:
+
  
<code>
+
Finalmente, ya sea dentro del método "Draw" o del evento "serialEvent" (recomendado) se escriben los datos al archivo:
fichero.print(valor1);
+
fichero.print(',');
+
fichero.println(valor2);
+
fichero.flush();
+
</code>
+
  
 +
<syntaxhighlight lang="java">
 +
archivo.print(valor1);
 +
archivo.print(',');
 +
archivo.println(valor2);
 +
archivo.flush();
 +
</syntaxhighlight>
  
 
== Bibliografía ==
 
== Bibliografía ==

Revisión actual del 15:01 18 nov 2013


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