Está en la página 1de 28

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() • list()
• Lee un grupo de bytes del buffer. • Devuelve una lista
• Syntax: de los puertos serie
Serial.readBytes() disponibles
• Parámetros:
serial: Serial: cualquier variable de tipo Serial.

• Devuelve:
Byte[] o int
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

También podría gustarte