e/s: processing & arduino - aeiua.files.wordpress.com · 0. introducción • processing. •...

Post on 18-Jul-2018

238 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

E/S:Processing & Arduino

Marco Pérez Hernández

CONTEXTUALIZACIÓN

Desarrollo de Aplicaciones Multiplataforma

0485 Programación

256 horas

Lectura y escritura de información

0. Introducción

• Processing.

• Arduino.

• Podemos utilizar ambos para hacer que “hablen”, por ejemplo

para mostrar o guardar datos enviados de uno al otro.

• Arduino viene con algunos ejemplos básicos para comunicarse

con Processing.

1. Objetivos de la clase

• Enviar datos desde Arduino a Processing a través del puerto serie.

• Recibir los datos enviados desde Arduino en Processing.

• Enviar datos desde Processing a Arduino.

• Recibir los datos enviados desde Processing a Arduino.

• Configurar un “handshake” entre Arduino y Processing para controlar

el flujo de datos.

2. Arduino: primeros pasos

• Comandos básicos

• int ledPin = 13;

• pinMode(pin, modo) modo=INPUT o OUTPUT

• digitalWrite(pin, modo) modo=HIGH o LOW

• digitalRead(pin) devuelve HIGH o LOW

• analogRead(pin) devuelve valor [0, 5V] = [0, 1023]

3. Clase Serial

• Utilizada para la comunicación entre la placa Arduino y un

ordenador o dispositivo.

• Todos los arduinos tienen al menos un puerto serie (UART; USART).

• Se comunica a través de los pins digitales 0 (RX) y 1 (TX), como

también por el cable USB. Anula los pins 0 y 1 si se utiliza.

3. Clase Serial

• readBytes()

• Lee un grupo de bytes del buffer.

• Syntax:

Serial.readBytes()

• Parámetros:

serial: Serial: cualquier variable de tipo Serial.

• Devuelve:

Byte[] o int

• list()

• Devuelve una lista

de los puertos serie

disponibles

3. Clase Serial

• readString()

• Devuelve los datos leídos del buffer como ASCII del buffer como String.

Para transmitir con Unicode o UTF8 habría que realizar una conversión.

• Syntax:

serial.readString()

• Parametros:

serial: Serial: Cualquier variable tipo Serial.

• Devuelve:

String

3. Clase Serial

• readBytesUntil() • Lee del puerto hasta que detecte el carácter especificado en inByte.

• Syntax:

Serial.readBytesUntil(inByte)

• Parámetros:

serial: Serial: cualquier variable de tipo Serial.

inByte: int: carácter designado para señalar la finalización.

• Devuelve:

String

3. Clase Serial

• readStringUntil()

• Combinación de readBytesUntil() y readString(). Devuelve null si no encuentra lo que buscamos.

• Syntax:

Serial.readStringUntil(inByte)

• Parámetros:

serial: Serial: cualquier variable de tipo Serial.

inByte: int: carácter designado para señalar la finalización.

• Devuelve:

String

3. Clase Serial

• buffer()

• Define el número de bytes a almacenar en el buffer al llamar a serialEvent()

• Syntax:

serial.buffer(size)

• Parametros:

serial: Serial: Cualquier variable tipo Serial.

Size: int: número de bytes to buffer.

• Devuelve:

void

3. Clase Serial

• bufferUntil()

• Define un byte específico a almacenar en el buffer antes de llamar a serialEvent()

• Syntax:

serial.buffer(size)

• Parametros:

serial: Serial: Cualquier variable tipo Serial.

Size: int: número de bytes to buffer.

• Devuelve:

void

3. Clase Serial

• serialEvent()

• Es llamado siempre que haya datos disponibles en el puerto serie.

La rutina se ejecuta entre cada función loop(), por lo que utilizar delay dentro de un loop puede retrasar la respuesta.

Para capturar los datos, usar algún método read(),.

Puede ser definido mediante buffer() sólo para activarse cuando un cierto número de elementos es leído o mediante

bufferUntil() para activarse después de que un determinado carácter sea leído.

El parámetro myPort contiene el nombre del puerto donde los datos están disponibles.

• Syntax:

Void serialEvent(Serial myPort) {

statements

}

• Parametros:

myPort: Serial: el puerto con datos disponibles

Statementes any valid statements

4. Conectando Arduino con Processing

Inicializamos la comunicación serial:

9600 baudios (símbolos/s)

Saludamos por el puerto serie.

4. Conectando Arduino con Processing

• Importar librería serial:

import processing.serial.*;

4. Conectando Arduino con Processing

4. Conectando Arduino con Processing

5. Conectando Processing con Arduino

• Importar librería serial

• Declarar un objeto de la

clase Serial

• Setup(): buscar puerto,

inicializar comunicación serial

con ese puerto, y 9600

baudios

• Draw(): serial.write

escribimos sobre el puerto

serial.

5. Conectando Processing con Arduino

5. Conectando Processing con Arduino

• Necesitamos 2 variables:

1x leer datos que provienen de

processing

1x asignar el led del arduino

• Setup(): configurar la variable del pin

13 de arduino como salida e

inicializar la comunicación serial.

• Loop(): escuchar a ‘val’ y encender el

led si envía 1’s.

6. Comunicación bidireccional

• Podemos crear un link que permita el flujo bidireccional de datos. Podremos enviar y recibir por el mismo canal.

• Ambas partes han de ponerse de acuerdo para enviar y recibir.

• Arduino enviará una “A” a Processing que contestará con otra “A”. Una vez establecido el contacto, un click en Processing significará enchufar o apagar el LED de Arduino.

• Se modifica el código anterior para minimizar el tráfico del puerto serie y optimizar el tiempo de respuesta establishContact()

6. Comunicación bidireccional: Arduino

6. Comunicación bidireccional: Processing

7. Detector de color

• Enviar múltiples valores desde la placa Arduino al PC.

• Processing leerá estos valores enviados, que variarán

según el valor de la fotoresistencia, y configurará el

color del fondo de pantalla de Processing.

7. Detector de color

7. Detector de color

7. Detector de color

8. Ejercicio propuesto

top related