#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);// descripcion del display
//***PROYECTO DINO***
// varibles para secuecia de obstaculos
//int leds;
//int estado_leds;
//int posicion=2;
struct potenciometro {
const int pin;
int v_minimo;
int v_maximo;
};
struct potenciometro Pote = {33,1000,5000};
unsigned long tiempo_actual; //para millis()
unsigned long tiempo_anterior_poten;
unsigned long tiempo_base; //para la velocidad del potenciométro
unsigned long tiempo_anterior_pulsador; // variables para pulsador
int estado_pulsador; // 0=suelto; 1=pulsado
int lectura_pulsador;//VER SI LA USO
#define puldaso 1; //Salta
#define no_pulsado 0; //Corriendo
int estado_de_led;
//CARACTERES
byte cactus1[]={ B00000,B00000,B00100,B10100, B10101,B11101,B00111,B00100
}; //Cactus
byte dino1[]={ B00000,B00000,B00000,B01001, B01111,B00111,B00011,B00001
}; //Dinosaurio parado 1°parte
byte dino2[]={ B01111,B01011,B11111,B11100, B11100,B11100,B11000,B01000
}; //Dinosaurio parado 2°parte del dino
byte derecha[]={ B00000,B00000,B00000,B01001, B01111,B00111,B00011,B00000
}; //Dinos levantando la pata derecha
byte izq[]={ B01111,B01011,B11111,B11100, B11100,B11100,B10000,B00000
}; //dino levantando la pata izq
//tiempo de reset
unsigned long tiempodereset; //VER SI LO USO
// variables de dino
int estado_dino; // 1=sin saltas; 0;salta //VER SI LO USO
void setup(){
lcd.init(); //prender display
lcd.backlight();
//DINO COMPLETO:
lcd.createChar(1,dino1); //lo uso tambien para levantar la pata izq
lcd.createChar(2,dino2); //lo uso tambien para levantar la pata derecha
lcd.createChar(3,derecha); //dino levantando la DERECHA
lcd.createChar(4,izq); //dino levantando la IZQUIERDA:
Serial.begin(115200);
lcd.createChar(5,cactus1); // Cactus1
pinMode(16, INPUT); // Pulsador
pinMode(5, OUTPUT); // Led
}
// facilito que columna muestro y fila
int dino_columna1=3;
int dino_columna2=4;
int parado_fila=1;
int saltando_fila=0;
int fila_obst=1;
int columna_obst=15;
int mov_col;
//para ver mas facil que MATRIZ muestro en writhe
int dinop1=1;
int dinop2=2;
int derecha1=3;
int izq1=4;
int vercactus1=5;
void loop(){
tiempo_base = map (analogRead(Pote.pin), 0, 4095, Pote.v_minimo, Pote.v_maximo);
tiempo_actual = millis();
if( (tiempo_actual - tiempo_anterior_poten)>= tiempo_base) {
tiempo_anterior_poten = tiempo_actual;
if (estado_de_led==0) { //inicio la secuencia de obstaculos
digitalWrite(5,1); //enciendo led1
estado_de_led=1;
} else {
digitalWrite(5,0);
estado_de_led=0;
mov_col=columna_obst--; //reduzco la posición
lcd.setCursor(mov_col,fila_obst);
lcd.write(vercactus1);
delay(tiempo_base);
lcd.clear();
Serial.print(tiempo_base);
if (mov_col==dino_columna2 ){ // ver estado del pulsador cd 20 miliseg para hacer una funcion no bloqueante
if (estado_pulsador==0){
lcd.setCursor(5,0);
lcd.write('Game over');
}
}
if (mov_col==dino_columna1 ){ // ver estado del pulsador cd 20 miliseg para hacer una funcion no bloqueante
if (estado_pulsador==0){
lcd.setCursor(5,0);
lcd.write('Game over');
}
}
}
}
// ver estado del pulsador cd 20 miliseg para hacer una funcion no bloqueante
if((tiempo_actual - tiempo_anterior_pulsador) >= 5){
tiempo_anterior_pulsador=tiempo_actual;
estado_pulsador=digitalRead(16);
if (estado_pulsador==0){
//dino levantando DERECHA:
lcd.setCursor(dino_columna1, parado_fila);
lcd.write(derecha1);
lcd.setCursor(dino_columna2, parado_fila);
lcd.write(dinop2);
delay(tiempo_base);
// Dino levantando la IZQUIERDA:
lcd.setCursor(dino_columna1, parado_fila);
lcd.write(dinop1);
lcd.setCursor(dino_columna2, parado_fila);
lcd.write(izq1);
delay(tiempo_base);
}else{ //pulsador pulsado DINO SALTANDO POSICION COLUMNA 3 FILA 0:
lcd.setCursor(dino_columna1, saltando_fila);
lcd.write(dinop1);
lcd.setCursor(dino_columna2, saltando_fila);
lcd.write(dinop2);
//delay(tiempo_base);
}
}
delay(10);
}