Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Flappy Duino con LCD NOKIA 5110.
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa vamos a simular el famoso videojuego "Flappy Bird" que la mayoría conoceremos
- de haber jugado alguna vez en nuestro Smartphone. El pajarillo subirá hacia arriba cada vez que
- presionemos o mantengamos presionado el pulsador. Nuestra misión es la de pasar a través de los
- agujeros de los muros que vamos encontrando por el camino y el juego finaliza cuando nos chocamos.
- La puntuación final depende del tiempo que el pájaro vuele hacia arriba.
- Son necesarias las librerías propias "Bar.h", "Chym.h" y "Sprite.h" que contiene la carpeta del
- programa para que el juego funcione correctamente.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
- | 5V/MISO2 [ ][ ] A4/SDA[ ] |
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] | RST del LCD NOKIA 5110 a través de R=10K ohms
- | [ ]RST MOSI/11[ ]~| CE del LCD NOKIA 5110 a través de R=10K ohms
- | [ ]3V3 +---+ 10[ ]~| DC del LCD NOKIA 5110 a través de R=10K ohms
- | [ ]5v -| A |- 9[ ]~| Din del LCD NOKIA 5110 a través de R=10K ohms
- | [ ]GND -| R |- 8[ ] | Clk del LCD NOKIA 5110 a través de R=10K ohms
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] |
- | -| I |- 6[ ]~|
- | [ ]A0 -| N |- 5[ ]~|
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] | PA
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
- - Conexión del pulsador (Utilizamos INPUT_PULLUP para evitar conectar una resistencia de 10K ohms)
- - PB conectado a GND.
- - PA conectado a +5V.
- - Conexión de la alimentación del LCD NOKIA 5110:
- - VCC --> +3.3V
- - GND --> GND
- - BL (BackLight) --> +3.3V.
- */
- // Incluimos librerías
- #include <SPI.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_PCD8544.h>
- // Hay que poner una resistencia de 10K ohms en los siguientes pines para limitar el voltaje a 3V
- Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);
- #include "Sprite.h"
- #include "Chym.h"
- #include "Bar.h"
- Chym player;
- Bar bar; Bar bar2;
- int puntos = 0; // Variable para almacenar la puntuación
- int pulsador = 2; // Pin digital para el pulsador
- boolean subir_pajaro = false;
- int estado_pulsador;
- // Función que resetea el juego
- void resetGame()
- {
- player.respawn();
- bar.setPos(0, 20);
- bar2.setPos(50, 30);
- puntos = 0;
- }
- void setup()
- {
- // Comienza la comunicación con la pantalla
- display.begin();
- display.setContrast(50);
- display.clearDisplay();
- display.display();
- pinMode(pulsador, INPUT_PULLUP); // Pin digital 2 como entrada con conexión PULL-UP interna.
- resetGame(); // Resetea el juego
- }
- void loop()
- {
- getInput(); // Lee el estado del pulsador
- player.update(); // Actualiza la posición del pájaro
- bar.update(); // Actualiza la posición de la barra de arriba
- bar2.update(); // Actualiza la posición de la barra de abajo
- drawLCD(); // Muestra resultados por pantalla
- }
- // Función que lee el estado del pulsador y actúa en consecuencia
- void getInput()
- {
- int estado_pulsador = digitalRead(pulsador);
- if (estado_pulsador == LOW)
- {
- subir_pajaro = true;
- puntos++;
- }
- else
- {
- subir_pajaro = false;
- }
- }
- // Función que muestra los resultados por pantalla
- void drawLCD()
- {
- display.clearDisplay();
- if (!player.isDead())
- {
- int ht1 = bar.hitTest(player.getX(), player.getY());
- int ht2 = bar2.hitTest(player.getX(), player.getY());
- int die = ht1 + ht2;
- if (die == 1)
- {
- player.die(); // Game over
- }
- if (subir_pajaro)
- {
- player.flyUp();
- }
- else
- {
- player.cancelJump();
- }
- player.render();
- bar.render(); bar2.render();
- }
- else
- {
- display.setCursor(0, 0); // Columnas x filas
- display.setTextSize(1);
- display.println(" Game Over!!!");
- display.setCursor(0, 15);
- display.print("< Puntuacion >");
- display.setCursor(0, 30);
- display.setTextSize(2);
- if(puntos < 10)
- {
- display.print(" ");
- }
- else if(puntos >= 10 && puntos < 1000)
- {
- display.print(" ");
- }
- else
- {
- display.print(" ");
- }
- display.print(puntos);
- if (subir_pajaro)
- {
- resetGame();
- }
- }
- display.display();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement