Objetivo: Arduino puede comunicarse con el ordenador a través del puerto serie. Desde Arduino controlaremos el movimiento de un coche (giro y translación) que estará dibujado en una aplicación de escritorio creada con Processing.
Comentarios: En este proyecto hemos hecho un par de cambios significativos respecto el proyecto de Arduino libro de proyectos.
Primero de todo es muy importante que substituyais el Delay(1) por Delay(50). Si no lo hacéis, tendréis un retardo en la respuesta del ordenador.
Hemos utilizado un potenciómetro para girar el coche y dos botones para el movimiento hacia delante y hacia atrás.
Vídeo:
Componentes: Arduino Uno 3R, 1 potenciometro, 2 interruptores, 2 resistencias de 10KΩ.
Imagen del circuito:
Código Arduino:
void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, INPUT); } void loop() { Serial.write(analogRead(A0)/4); if(digitalRead(2) == HIGH){ Serial.write(1); } else { Serial.write(0); } if(digitalRead(3) == HIGH){ Serial.write(1); } else{ Serial.write(0); } delay(50); }
Código Processing:
import processing.serial.*; Serial miPuerto; PImage logotipo; int anguloRotacion = 0; int botonDelante = 0; int botonDetras = 0; int desplazamiento = 0; float ang = 0; void setup(){ size(800, 600); colorMode(HSB, 255); miPuerto = new Serial(this, Serial.list()[0], 9600); logotipo = loadImage("http://1.bp.blogspot.com/-Ba-RCxbJQGI/VOSNxXPjr5I/AAAAAAAAHCs/egz3VPI6aeU/s1600/coche1.png"); } void draw(){ if (miPuerto.available()>0){ anguloRotacion = miPuerto.read(); botonDelante = miPuerto.read(); botonDetras = miPuerto.read(); if(anguloRotacion != -1 && botonDetras != -1 && botonDelante != -1){ ang = float(anguloRotacion)/255*2*PI; desplazamiento = desplazamiento + 5*botonDelante - 5*botonDetras; //Para que el coche no se salga de la pantalla hemos puesto este if
if (desplazamiento >400 || desplazamiento <-400){ desplazamiento =0; } } } background(50,200,200); translate(width/2, height/2); rotate(ang); image(logotipo,0, desplazamiento); }