#include "LedControl.h"
#define WIDTH 16
#define HEIGHT 8
#define PADLENGTH 3
// Parámetros: pines DIN, CLK, CS y 2 (2 displays)
LedControl lc=LedControl(8,10,9,2);
const int analog_in = A3; // entrada analogica potenciometro
int val, pos;
byte pantalla[8][16]; // pantalla
int x, y; // posición de la bola
int dx, dy; // delta
int gameover = 0;
void plot(int x, int y)
{
int screen;
if (x>=0 && x==0 && y<HEIGHT) {
if (x > ((WIDTH/2)-1)) {
x = x - HEIGHT;
screen = 1;
} else {
screen = 0;
}
lc.setLed(screen, x, y, 1);
}
}
void draw_screen(int x, int y)
{
int i;
// draw PAD
for (i=0; i<PADLENGTH; i++) {
plot(pos+i, 0);
}
// draw ball
plot(x, y);
}
void move()
{
x = x + dx;
y = y + dy;
if (x<1 || x>=WIDTH-1) {
dx = -dx;
}
if (y>=HEIGHT-1) {
dy = -dy;
}
if (y==1 && x>=pos && x<=pos+PADLENGTH) {
// rebota con la raqueta
dy = -dy;
}
if (y < 0) {
// pelota sale por abajo. Game over
gameover = 1;
}
}
void setup() {
lc.shutdown(0,false); // Iniciamos la matriz led
lc.setIntensity(0,5); // Intensidad de los leds
lc.clearDisplay(0); // Apagamos los leds
lc.shutdown(1,false); // Iniciamos la matriz led
lc.setIntensity(1,5); // Intensidad de los leds
lc.clearDisplay(1); // Apagamos los leds
x = y = 0;
dx = dy = 1;
pos = 0;
Serial.begin(9600);
}
void loop() {
int i;
while(true) {
if (!gameover) {
// leer entrada
val = analogRead(analog_in);
pos = map(val, 0, 1023, WIDTH - PADLENGTH, -1);
Serial.println(pos);
// actualizar matriz de LEDs
lc.clearDisplay(0);
lc.clearDisplay(1);
draw_screen(x,y);
move();
delay(200);
} else {
// game over
for (i=0; i<HEIGHT; i++) {
lc.setColumn(0,i,B11111111);
lc.setColumn(1,HEIGHT-i-1,B11111111);
delay(200);
}
x = y = 0;
dx = dy = 1;
gameover = 0;
}
}
}