En este proyecto programaremos un simple juego de frontón con arduino-processing y un joystick conectado a arduino.
El programa en Processing es:
import processing.serial.*; //importamos la libreria para trabajar con el puerto serie
Serial mipuerto; //Nombre del puerto serie
float pos_pelotaX=50;
float pos_pelotaY=300;
float incrementoX=5;//incremento de la bola en X
float incrementoY=3;//incremento de la bola en Y
int pos_raqueta=250;
int incrementoR=10;
int valor_serie=0; //En esta vble almacenaremos el valor de la información transmitida por el puerto por parte de Arduino
int puntos=0;
int fallos=0;
boolean derecha=true; //será verdadero si la pelota viene desde la derecha y falso si viene rebotada desde la izquierda
void setup() {
size(600, 600);
mipuerto = new Serial(this, "COM11", 9600); //inicializamos el puerto
}
void draw() {
if (mipuerto.available() > 0) { //si hay algo que leer...
valor_serie = mipuerto.read(); //lo almacena en la variable valor_serie
}
if (pos_pelotaX<25) { //Cuando choque con la pared izda, cambia de dirección en X
incrementoX=-incrementoX;
derecha=true; //la pelota ira hacia la derecha
}
if (pos_pelotaX>575) {//Cuando choque con la pared derecha, cambia de dirección en X
incrementoX=-incrementoX;
derecha=false; //la pelota ira hacia la izquierda
}
if ((pos_pelotaY<25)||(pos_pelotaY>575)) { //Cuando choque cambia de dirección en Y
incrementoY=-incrementoY;
}
background(255, 255, 0);
control();
pelota(pos_pelotaX, pos_pelotaY);
raqueta(pos_raqueta);
if (choque() && derecha) {
puntos=puntos+1; //Si chocan raqueta y bola sumamos un punto
incrementoX=-incrementoX;
}
if (pos_pelotaX==550) {
fallos=fallos+1;
}
textSize(32);
fill(0);
text ("puntos: ", 10, 30);
text ("fallos: ", 10, 70);
text (puntos, 150, 30);
text (fallos/2, 150, 70);
pos_pelotaX=pos_pelotaX+incrementoX;
pos_pelotaY=pos_pelotaY+incrementoY;
}
//Procedimiento que dibuja la raqueta
void raqueta (int posR) {
fill(0, 0, 255);
noStroke();
rect(550, posR, 10, 100);
}
//Procedimieinto que dibuja la pelota
void pelota (float posX, float posY) {
fill(255, 0, 0);
ellipse(posX, posY, 50, 50);
}
//procedimiento que comprueba si han chocado
boolean choque() {
if (pos_pelotaY<pos_raqueta) {
if ((pos_pelotaX==525) && ((pos_raqueta-pos_pelotaY)<5)) {
return true;
}
}
if (pos_pelotaY>pos_raqueta) {
if ((pos_pelotaX==525) && ((pos_pelotaY-pos_raqueta)<95)) {
return true;
}
}
return false;
}
//control de la raqueta con el joystick que envia información a través del puerto serie desde arduino
void control() {
if (pos_raqueta>500) { //Si se sale de los límites no seguimos sumando nada a la posición
pos_raqueta = 500;
}
if (pos_raqueta<0) { //Si se sale de los límites no seguimos restando nada a la posición
pos_raqueta = 0;
}
if (valor_serie==2) { //Joystick hacia abajo
pos_raqueta = pos_raqueta + incrementoR;
}
if (valor_serie==1) { //Joystick hacia arriba
pos_raqueta = pos_raqueta - incrementoR;
}
}
El programa de Arduino es:
void setup() {
Serial.begin(9600);
}
void loop() {
//Dependiendo de la posición del joystick
//información al puerto para que la lea processing
delay(100);
if (analogRead(A0) > 520) {
Serial.write(1);
delay(30); //para no saturar el puerto
} else if (analogRead(A0) < 490) {
Serial.write(2);
delay(30);
}else Serial.write(0);
}
No hay comentarios:
Publicar un comentario