Diferencia entre revisiones de «Processing»
(→Comunicaciones por Puerto Serial) |
|||
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 | + | '''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 19: | Línea 19: | ||
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: | ||
− | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
import processing.serial.*; | import processing.serial.*; | ||
</syntaxhighlight> | </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"> | <syntaxhighlight lang="java"> | ||
Serial puerto; | Serial puerto; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
Después inicializarlo con los siguientes parámetros. | Después inicializarlo con los siguientes parámetros. | ||
Línea 41: | Línea 37: | ||
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 48: | 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* | ||
* 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 65: | 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. | ||
Línea 75: | Línea 66: | ||
</syntaxhighlight> | </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. |
− | + | ||
− | + | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Línea 90: | Línea 78: | ||
</syntaxhighlight> | </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"> | <syntaxhighlight lang="java"> | ||
Línea 111: | Línea 95: | ||
</syntaxhighlight> | </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" cuántos bytes queremos leer cada vez, esperar a que se active el evento "serialEvent", y dentro de este leer los bytes.''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | '''2) Definir en el método Setup | + | |
− | + | ||
− | + | ||
En Setup: | En Setup: | ||
Línea 128: | Línea 105: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | En el cuerpo principal del sketch: | + | En el cuerpo principal del ''sketch'': |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Línea 141: | Línea 118: | ||
</syntaxhighlight> | </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. | |
− | + | ||
− | 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"> | <syntaxhighlight lang="java"> | ||
Línea 150: | Línea 124: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Si se desea escribir los datos que se reciben a un fichero se debe crear una variable global del tipo "PrintWriter". | |
− | + | ||
− | Si se desea escribir los datos que se reciben a un fichero se debe crear una variable global del tipo PrintWriter. | + | |
− | + | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Línea 159: | Línea 130: | ||
</syntaxhighlight> | </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"> | <syntaxhighlight lang="java"> | ||
Línea 167: | Línea 136: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Finalmente, ya sea dentro del método "Draw" o del evento "serialEvent" (recomendado) se escriben los datos al archivo: | |
− | Finalmente, ya sea dentro del método Draw o del evento serialEvent (recomendado) se escriben los datos al archivo: | + | |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> |
Revisión actual del 15:01 18 nov 2013
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
- Sitio web oficial de Processing (en inglés)
- Tutorial de Processing para mentes Macromedia (en castellano)
- Foro de Processing (en castellano)
- Taller de Processing (en castellano)