Reto arduino + processing Por: Daniel Jaramillo Ochoa – 30000024528 Jose Ricardo Giraldo Loaiza – 1033472 Super Air Hockey – Blue vs Red Link video de youtube: https://youtu.be/glSm60bsA0E Esquema de conexion: Codigo de Processing: El codigo consta de 4 clases, Air Hockey, Disco, Habilidad y Paddle. -Clase Air Hockey import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; import ddf.minim.signals.*; import ddf.minim.spi.*; import ddf.minim.ugens.*; import cc.arduino.*; import org.firmata.*; import processing.serial.*; //Clases que se llaman Disco[] Disco= new Disco[5]; Paddle[] player= new Paddle[2]; Minim soundBackground= new Minim(this); Arduino arduino; Habilidad[] Habilidad= new Habilidad[2]; //Todas las variables PImage fondo; PImage fondoIntro; PImage ganador1; PImage ganador2; PImage pEmpate; int habilidad1 = 0; int habilidad2 = 0; int comprobarHabilidad1 = 0; int comprobarHabilidad2 = 0; int comprobarSegundaHabilidad1 = 0; int comprobarSegundaHabilidad2 = 0; float control1; float control2; float posicion1; float posicion2; int puntaje1 = 0; int puntaje2 = 0; String anotacion; int comprobarAnotacion; int estadoJuego = 0; int time; int time2; void setup() { size(1004, 599); AudioPlayer song = soundBackground.loadFile("MusicaFondo.mp3"); song.play(); song.loop(); fondo = loadImage("Fondo.png"); fondoIntro = loadImage("Menu.png"); ganador1 = loadImage("Ganador1.png"); ganador2 = loadImage("Ganador2.png"); pEmpate = loadImage("Empate.png"); player[0]= new Paddle(); player[1]= new Paddle(); for (int i=0; i < Disco.length; i++) { Disco[i] = new Disco(); } for (int i=0; i < Habilidad.length; i++) { Habilidad[i] = new Habilidad(); } //Iniciar arduino y leds arduino = new Arduino(this, Arduino.list()[0], 57600); arduino.pinMode(8, arduino.INPUT); arduino.pinMode(3, arduino.OUTPUT); arduino.pinMode(4, arduino.OUTPUT); arduino.pinMode(6, arduino.OUTPUT); arduino.pinMode(5, arduino.OUTPUT); arduino.pinMode(7, arduino.OUTPUT); arduino.pinMode(2, arduino.OUTPUT); arduino.digitalWrite(6, Arduino.HIGH); arduino.digitalWrite(5, Arduino.HIGH); arduino.digitalWrite(7, Arduino.HIGH); arduino.digitalWrite(2, Arduino.HIGH); } void draw() { if (estadoJuego == 0) { background(fondoIntro); if (keyPressed) { if ( key == 'n' || key == 'N' ) { estadoJuego = 1; time2 = millis()/1000; } } } //Estado del juego y posicion if (estadoJuego == 1) { time = (millis()/ 1000) - time2; background(fondo); control1 = arduino.analogRead(0); control2 = arduino.analogRead(1); posicion1 = map(control1, 0, 1023, 0, height-80); posicion2 = map(control2, 0, 1023, 0, height-80); Disco[0].pintar(); Disco[0].mover(); Disco[0].rebotar(); //Aquí se inicia el juego if (keyPressed) { if ( key == 'n' || key == 'N' ) { Disco[0].angle= random(TWO_PI); Disco[0].spX= 8 * cos( Disco[0].angle); Disco[0].spY= 8 * sin( Disco[0].angle); arduino.digitalWrite(3, Arduino.LOW); arduino.digitalWrite(4, Arduino.LOW); comprobarAnotacion= 0; anotacion = ""; textSize(50); text(anotacion, (width/2)-100, height/2); } } if (comprobarAnotacion == 1) { anotacion = "¡Anotación!"; textSize(100); text(anotacion, (width/2)-250, 200); } //Y aqui los jugadores player[0].relleno= color(0, 0, 255); player[0].pintar(); player[0].posY= posicion1; player[1].relleno= color(255, 0, 0); player[1].pintar(); player[1].posX= width-27; player[1].posY= posicion2; //Cargar la habilidad if (keyPressed) { if (key == 'q' || key == 'Q') { if (habilidad1 == 0) { habilidad1 = 1; arduino.digitalWrite(6, Arduino.LOW); Habilidad[0].posX= 50; if (habilidad2 == 0) { comprobarHabilidad2 = 1; habilidad2 = 2; } else { comprobarHabilidad2 = 2; } } } if (key == 'o' || key == 'O') { if (habilidad2 == 0) { habilidad2 = 1; arduino.digitalWrite(5, Arduino.LOW); Habilidad[1].posX= width - 150; if (habilidad1 == 0) { comprobarHabilidad1 = 1; habilidad1 = 2; } else { comprobarHabilidad1 = 2; } } } } if (habilidad1 == 1) { Habilidad[0].mover(); Habilidad[0].colision(); } if (comprobarHabilidad2 == 1) { Habilidad[1].mover(); Habilidad[1].colision(); } if (habilidad2 == 1) { Habilidad[1].mover(); Habilidad[1].colision(); } if (comprobarHabilidad2 == 1) { Habilidad[0].mover(); Habilidad[0].colision(); } if (keyPressed) { if (key == 'w' || key == 'W' ) { if (comprobarSegundaHabilidad1 == 0) { comprobarSegundaHabilidad1 = 1; arduino.digitalWrite(7, Arduino.LOW); player[0].tamY= player[0].tamY + 20; } } } if (keyPressed) { if (key == 'p' || key == 'P') { if (comprobarSegundaHabilidad2 == 0) { comprobarSegundaHabilidad2 = 1; arduino.digitalWrite(2, Arduino.LOW); player[1].tamY= player[1].tamY + 20; } } } //El juego debe durar un minuto sin limite de anotaciones if (time == 60) { estadoJuego = 2; } //Puntajes textSize(50); fill(255); text(puntaje1, (width/2)-120, 70); text(puntaje2, (width/2)+90, 70); textSize(20); text("Time: " + time, 60, 30); } //Y resultados if (estadoJuego == 2) { if (puntaje1 > puntaje2) { background(ganador1); } if (puntaje1 < puntaje2) { background(ganador2); } if (puntaje1 == puntaje2) { background(pEmpate); } if (keyPressed) { if ( key == 'n' || key == 'N') { puntaje1 = 0; puntaje2= 0; comprobarHabilidad1 = 0; comprobarHabilidad2 = 0; habilidad1 = 0; habilidad2 = 0; comprobarSegundaHabilidad1 = 0; comprobarSegundaHabilidad2 = 0; estadoJuego=0; } } } } -Clase Disco class Disco{ float posX; float posY; float angle; //Velocidad float spX; float spY; //Aceleracion float acX; float acY; color relleno; float tam; int comp; Disco(){ angle= random(TWO_PI); posX= width/2; posY= height/2 ; spX= 8 * cos(angle); spY= 8 * sin(angle); acX= 0.2; acY= 0.2; tam= 30; relleno = color(255); } void pintar(){ noStroke(); fill(0, 0, 0, 50); ellipse(posX + 4, posY + 6, tam, tam); fill(relleno); lights(); ellipse(posX, posY, tam, tam); } void mover(){ posX= posX + spX; posY= posY + spY; } void rebotar(){ if(posX > width){ puntaje1++; posX= width/2; posY= height/2 ; spX= 0; spY= 0; comp= -1; comprobarAnotacion=1; player[0].tamY= 80; player[1].tamY= 80; Habilidad[1].posX= width - 150; Habilidad[0].posX= 50; habilidad1 = 0; habilidad2 = 0; comprobarHabilidad1 = 0; comprobarHabilidad2 = 0; comprobarSegundaHabilidad2 = 0; comprobarSegundaHabilidad1 = 0; arduino.digitalWrite(4, Arduino.HIGH); arduino.digitalWrite(6, Arduino.HIGH); arduino.digitalWrite(5, Arduino.HIGH); arduino.digitalWrite(2, Arduino.HIGH); arduino.digitalWrite(7, Arduino.HIGH); } if(posX < 0){ puntaje2++; posX= width/2; posY= height/2 ; spX= 0; spY= 0; comp= 1; comprobarAnotacion=1; player[0].tamY= 80; player[1].tamY= 80; Habilidad[1].posX= width - 150; Habilidad[0].posX= 50; habilidad1 = 0; habilidad2 = 0; comprobarHabilidad1 = 0; comprobarHabilidad2 = 0; comprobarSegundaHabilidad2 = 0; comprobarSegundaHabilidad1 = 0; arduino.digitalWrite(3, Arduino.HIGH); arduino.digitalWrite(6, Arduino.HIGH); arduino.digitalWrite(5, Arduino.HIGH); arduino.digitalWrite(2, Arduino.HIGH); arduino.digitalWrite(7, Arduino.HIGH); } if(posY > height - 23 || posY < 23){ spY = spY*(-1); } if(posX < 28 && posY > player[0].posY && posY < player[0].posY + player[0].tamY){ spX = spX*(-1) + 1; spX += 0.92; } if(posX > width-27 && posY > player[1].posY && posY < player[1].posY + player[1].tamY ){ spX = spX*(-1) - 1; } } } -Clase Habilidad class Habilidad{ float posX; float posY; float spX; float spY; color relleno; float tamX; float tamY; float acX; float acY; Habilidad(){ spX= 90; spY= 0; acX= 0; acY= 0.2; tamX= 80; tamY= 10; } void mover(){ if(habilidad1 == 1){ posX+=spX; } if(habilidad2 == 1){ posX-=spX; } } void colision(){ if(habilidad1==1){ if(posX > width-27 && posY > player[1].posY && posY < player[1].posY + player[1].tamY ){ player[1].tamY= player[1].tamY - 30; } if (posX > width){ habilidad1 = 2; if(comprobarHabilidad2 == 1){ habilidad2 = 0; } } } if(habilidad2==1){ if(posX < 28 && posY > player[0].posY && posY < player[0].posY + player[1].tamY ){ player[0].tamY= player[0].tamY - 30; } if (posX < 0){ habilidad2 = 2; if(comprobarHabilidad1 == 1){ habilidad1 = 0; } } } } } -Clase Paddle class Paddle { float posX; float posY; float tamX; float tamY; color relleno; Paddle() { posY = height/2; posX = 10; tamX= 18; tamY= 80; } void pintar(){ noStroke(); fill(0, 0, 0, 50); rect(posX, posY + 6, tamX + 5, tamY,10); fill(relleno); rect(posX, posY, tamX, tamY,10); } }