/* Ejemplo simple de comunicación de Processing a Arduino (input/output) La bola que aparece en la pantalla se moverá más o menos rápido según el sensor conectado al pin analógico 0, mientras que un LED en el pin 10 dará feedback visual cada vez que la bola rebota en un costado de la ventana. HARWARE NECESARIO: Potenciómetro (o similar), LED, placa de Arduino. SOFTWARE NECESARIO: Processing, Arduino, librería Arduino para Processing (http://www.arduino.cc/playground/Interfacing/Processing) ´ Autor: Joan Soler-Adillon Modificación del ejemplo arduino_input del la libreria "arduino" para processing http://www.arduino.cc/playground/uploads/Interfacing/processing-arduino-0017.zip Atención: Como mínimo para (mi) PC, con una placa de Arduino Diecimila, windows XP y Processing 1.0.7, el ejemplo funciona sólo con la versión Firmata --> StandardFirmata que se encuentra en la versión 0016 de Arduino, aunque la versión del software arduino con el que lo cargáis en la placa sea la 0017. Enero de 2010, CAMON, Alacant Licencia: Creative Commons, Attribution-Noncommercial-Share Alike 3.0 Unported http://creativecommons.org/licenses/by-nc-sa/3.0/ */ import processing.serial.*; import cc.arduino.*; Arduino arduino; float posX, posY, velX, velY; int dirX, dirY; int sz = 20; int ledPin = 10; void setup() { //ver lista de dispositivos en la consola (para escoger el puerto correcto en la siguiente línea) println(Arduino.list()); //aquí editamos el "1" de arduino.list para que coincida con el puerto al que tenemos la placa conectada arduino = new Arduino(this, Arduino.list()[1], 57600); size(300,200); posX = width/2; posY = height/2; //velX = velY = 5; dirX = dirY = 1; } void draw() { background(0); //escribimos en la consola el valor del sensor conectado al pin analógico 0: ///println(arduino.analogRead(0)); float valor = arduino.analogRead(0); println(valor); //como valor puede ir de 0 a 1024 y queremos velocidades entre 0 y 10, hay que escalarlo: velX = (valor/1024)*10; println((valor/1024)*10); velY = (valor/1024)*9; boolean tocando = false; //comprobamos la posición X if((posX<0)||(posX>width)){ dirX = -dirX; arduino.digitalWrite(ledPin, Arduino.HIGH); tocando = true; } //comprobamos la posición Y if((posY<0)||(posY>height)){ dirY = -dirY; arduino.digitalWrite(ledPin, Arduino.HIGH); tocando = true; } if(!tocando){ arduino.digitalWrite(ledPin, Arduino.LOW); } //actualitzamos las posiciones posX += velX*dirX; posY += velY*dirY; //dibujamos ellipse(posX,posY,sz,sz); }