En este laboratorio se manipulara en la pantalla de un computador un objeto gráfico usando processing leyendo los datos en Arduino mega desde un joystick shield
Lista de componentes
placa arduino uno o mega
cables varios
joystick
Montaje
montaje en protoboard
diagrama en fritzing
codigo arduino
//laboratorio 8
int pinarr=4; //pines a utilizar
int pinaba=5;
int pinizq=6;
int pinder=3;
int po=A0;
int pa=A1;
void setup()
{
//se inicia la comunicacion serial
//y se asignan el modo de los pines
Serial.begin(9600);
pinMode(pinarr, INPUT);
pinMode(pinaba, INPUT);
pinMode(pinizq, INPUT);
pinMode(pinder, INPUT);
pinMode(po, INPUT);
pinMode(pa, INPUT);
}
int x;
int y;
void loop()
{
x=analogRead(po);
y=analogRead(pa);
if (y>1022){
Serial.println("arriba");
}
if (y<1){
Serial.println("abajo");
}
if (x>1022){
Serial.println("der");
}
if (x<1){
Serial.println("izq");
}
delay(200);
}
codigo processing
import controlP5.*;
import processing.serial.*;
PImage img;
int iW2, iH2;
int posX, posY;
int velocity, angle;
Serial serial;
String val;
void setup() {
serial = new Serial(this, Serial.list()[0], 9600);
// tamaño de la ventana
size(800, 600);
// carga la imagen en la variable
img = loadImage("spaceship.gif");
iW2 = img.width/2;
iH2 = img.height/2;
posX = (width/2)-iW2;
posY = (height/2)-iH2;
velocity = -5;
angle = 0;
}
void draw() {
// limpia la ventana
background(0);
posX += velocity * sin(radians(angle));
if (posX-iW2 < 0) posX = width;
if (posX-iW2 > width) posX = iW2;
posY += velocity * cos(radians(angle));
if (posY-iH2 < 0) posY = height;
if (posY-iH2 > height) posY = iH2;
// dibuja la imagen
pushMatrix();
translate(posX-iW2, posY-iH2);
rotate(radians(-angle));
image(img, -iW2, -iH2);
popMatrix();
Cambio();
}
/*
void keyPressed() {
if (key == CODED) {
if (keyCode == UP)
velocity -= 5;
if (keyCode == DOWN)
velocity += 5;
if (keyCode == LEFT)
angle += 5;
if (keyCode == RIGHT)
angle -= 5;
}
}*/
void Cambio(){
if ( serial.available() > 0)
{ // If data is available,
val = serial.readString()+""; // read it and store it in val
}
println(val); //print it out in the console
if(val==null){val="0";}
if(val.indexOf("arriba")>=0){
velocity -= 5;
val="";
}
if(val.indexOf("abajo")>=0){
velocity += 5;
val="";
}
if(val.indexOf("izq")>=0){
angle += 5;
val="";
}
if(val.indexOf("der")>=0){
angle -= 5;
val="";
}
}
vídeo del laboratorio
No hay comentarios.:
Publicar un comentario