Skip to content

Instantly share code, notes, and snippets.

@jerivas
Last active August 29, 2015 14:07
Show Gist options
  • Save jerivas/585cec0f9ef9eb5b1f14 to your computer and use it in GitHub Desktop.
Save jerivas/585cec0f9ef9eb5b1f14 to your computer and use it in GitHub Desktop.
Gráficos de dispersión con Arduino y Processing por puerto serie
// Incluir la librería de Encoder
// http://www.pjrc.com/teensy/td_libs_Encoder.html
#include <Encoder.h>
// Inicializar un encoder conectado a los pines 2 y 3
Encoder encoder(2, 3);
// Variables para almacenar valores de encoder y ADC
long enc_old = 0;
int adc_now = 0;
// Rutina de configuración
void setup() {
// Iniciar la comunicación por el puerto serie
Serial.begin(9600);
}
// Rutina principal
void loop() {
// Leer valor actual del encoder
long enc_now;
enc_now = encoder.read();
// Leer valor actual del ADC (pin A0)
adc_now = analogRead(0);
// Ejecutar este bloque solo si la posición del encoder ha cambiado
if (enc_now != enc_old) {
// Enviar el valor del encoder y del ADC separados por coma por el puerto serie
Serial.print(enc_now);
Serial.print(", ");
Serial.print(adc_now);
Serial.println();
// Almacenar la posición actual del encoder para referencia el siguiente ciclo
enc_old = enc_now;
}
// Reiniciar el valor del encoder si se recibe cualquier dato por el puerto serie
if (Serial.available()) {
Serial.read();
encoder.write(0);
}
}
// Importar la librería de puerto serie
import processing.serial.*;
// Instancia del puerto serie a utilizar
Serial myPort;
// Variable que almacena la posicion actual en X
float xPos = 0;
// Variable que almacena la última posición conocida en Y
float yPosOld = 0;
// Rutina de configuración
void setup () {
// Crear ventana de 800x600px
size(800, 600);
// Establecer color del trazo
stroke(#A8D9A7);
// Obtener lista de puertos serie disponibles
println(Serial.list());
// Iniciar comunicación en el primer puerto serie disponible
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
// Pintar el fondo de la ventana de un color oscuro
background(#081640);
}
// Rutina principal
void draw () {
// Actualmente esta rutina no hace nada. Todo sucede en serialEvent()
}
// Rutina que se ejecuta cada vez que se reciben datos del puerto
void serialEvent (Serial myPort) {
// Leer el byte recibido
int inByte = myPort.read();
// Mostrarlo en pantalla
// println(inByte);
// Obtener la posición en Y actual
float yPos = height - inByte;
// Dibujar el trazo entre el punto anterior y el actual
line(xPos-1, yPosOld, xPos, yPos);
// Guardar la posición actual en Y para el siguiente punto
yPosOld = yPos;
// Reiniciar la posición en X si se llega al final de la ventana
if (xPos >= width) {
xPos = 0;
// Si no, incrementar la posición en X para el proximo punto
} else {
xPos++;
}
}
mode.id=processing.mode.java.JavaMode
mode=Java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment