Buenas,
Disculad!
Adjunto el codigo. Lo raro es que funcionaba perfectamente hace unas horas, y de repente dejó de funcionar.
Dentro de mi poco conocimiento, he intentado optimizar el código lo máximo posible.
Al final la funcionalidad es "adivinar" la contraseña de 3 números, utilizando tan solo 2 señales de entrada (2 botones fisicos) en los pines 2/3. Y en cualquier momento puedes volver al inicio del juego.
Lo que comento, la memoria del arduino indicaba que utiliza el 60% y la flash al 44% (si no recuerdo mal).
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
Adafruit_SSD1306 display(128, 64, &Wire, 13);
LiquidCrystal_I2C LCD(0x27,20,4);
int GAME=0;
int START=0;
int n1;
int n2;
int n3;
int RB = 2;
int LB = 3;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
LCD.init();
pinMode(RB,INPUT);
pinMode(LB,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Wanna play");
display.setCursor(0,20);
display.println("password game?");
display.display();
GAME=0;
START=0;
LCD.noBacklight();
LCD.clear();
if (digitalRead (RB)== HIGH && digitalRead(LB) == HIGH){
while (GAME == 0 && START==0){
START_GAME_LOOP();
}
while (GAME == 1 && START==0){
Password_Game_START();
}
while (GAME == 1 && START==1){
Password_Game_FIRST();
}
while (GAME == 1 && START==2){
Password_Game_SECOND();
}
while (GAME == 1 && START==3){
Password_Game_THIRD();
}
}
if ((digitalRead (RB)== HIGH && digitalRead(LB) == LOW) || (digitalRead (RB)== LOW && digitalRead(LB) == HIGH)){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("PRESS");
display.setCursor(0,20);
display.println("LB & RB");
display.display();
delay(1000);
}
}
//--------------------------------------------------------------------------------------------//
//GAME START//
void START_GAME_LOOP(){
if (GAME==0){
GAME=1;
delay(500);
}else {
GAME=0;
GAME=0;
START=0;
n1=0;
n2=0;
n3=0;
}
}
void GAME_LOOP(){
GAME=0;
START=0;
n1=0;
n2=0;
n3=0;
delay(500);
}
void Password_Game_START(){
if (digitalRead (RB) == LOW && digitalRead(LB) == LOW){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Let's");
display.setCursor(0,20);
display.println("start");
display.setCursor(0,40);
display.println("Press RB");
display.display();
//USE OTHER BUTTOM
if (digitalRead (RB) == LOW && digitalRead(LB) == HIGH){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("USE RB");
display.setCursor(0,40);
display.println("NOT LB");
display.display();
delay(3000);
}
//COUNT 3
if (digitalRead (RB) == HIGH && digitalRead(LB) == LOW){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Wait...");
display.setCursor(0,40);
display.println(3);
display.display();
delay(1000);
//COUNT 2
if (digitalRead(RB)==HIGH){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Wait...");
display.setCursor(0,40);
display.println(2);
display.display();
delay(1000);
//COUNT 1
if (digitalRead(RB)==HIGH){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Wait...");
display.setCursor(0,40);
display.println(1);
display.display();
delay(1000);
//COUNT 0
if (digitalRead(RB)==HIGH){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(1);
display.setCursor(0,0);
display.println("Wait...");
display.setCursor(0,40);
display.println(0);
display.display();
delay(1000);
START=1;
}
}
}
}
}
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
}
// PASWORD GAME START (FINISH)
//--------------------------------------------------------------------------------------------// PASSWORD 1
void Password_Game_FIRST (){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("FIRST CLUE");
display.setCursor(0,20);
display.println("CHOOSE NUMBER *1*");
display.setCursor(0,40);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,50);
display.println("PRESS RB TO ACCEPT");
display.display();
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n1 != 1){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("WRONG NUMBER");
display.setCursor(0,20);
display.println("TRY AGAIN");
display.display();
delay(1000);
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n1 == 1){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("GUESSED!!");
display.setCursor(0,20);
display.println("LET'S TRY SECOND ONE");
display.display();
delay(3000);
START=2;
}
//CHOSE FIRST NUMBER OF PASSWORD
if (digitalRead (LB) == HIGH && digitalRead(RB) == LOW){
while(digitalRead(RB) == LOW && START ==1){
//COME TO START
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("GAME FINISHED");
GAME_LOOP();
delay (1000);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("SEE OTHER SCREEN");
display.setCursor(0,20);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,40);
display.println("PRESS RB TO ACCEPT");
display.display();
if(digitalRead (LB)==HIGH){
if(n1 == 9){
n1 = 0;
delay(500);
}else{
n1 = n1 + 1;
delay(500);
}
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n1);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
}else{
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n1);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
}
}
}
}
//--------------------------------------------------------------------------------------------// PASSWORD 2
void Password_Game_SECOND (){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("SECOND CLUE");
display.setCursor(0,20);
display.println("2*5-3");
display.setCursor(0,40);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,50);
display.println("PRESS RB TO ACCEPT");
display.display();
LCD.backlight();
LCD.clear();
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n2 != 7){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("WRONG NUMBER");
display.setCursor(0,20);
display.println("TRY AGAIN");
display.display();
delay(1000);
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n2 == 7){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("GUESSED!!");
display.setCursor(0,20);
display.println("LET'S TRY LAST ONE");
display.display();
delay(3000);
START=3;
}
//CHOSE FIRST NUMBER OF PASSWORD
if (digitalRead (LB) == HIGH && digitalRead(RB) == LOW){
while(digitalRead(RB) == LOW && START ==2){
//COME TO START
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("SEE OTHER SCREEN");
display.setCursor(0,20);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,40);
display.println("PRESS RB TO ACCEPT");
display.display();
if(digitalRead (LB)==HIGH){
if(n2 == 9){
n2 = 0;
delay(500);
}else{
n2 = n2 + 1;
delay(500);
}
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n2);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
}else{
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n2);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
}
}
}
}
//--------------------------------------------------------------------------------------------// PASSWORD 3
void Password_Game_THIRD(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("LAST CLUE");
display.setCursor(0,20);
display.println("SECOND DIGIT OF YOUR");
display.setCursor(0,30);
display.println("BIRTHDAY");
display.setCursor(0,45);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,55);
display.println("PRESS RB TO ACCEPT");
display.display();
LCD.backlight();
LCD.clear();
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
LCD.setCursor(11,1);
LCD.print(n2);
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n3 != 8){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("WRONG NUMBER");
display.setCursor(0,20);
display.println("TRY AGAIN");
display.display();
delay(1000);
}
if (digitalRead (LB) == LOW && digitalRead(RB) == HIGH && n3 == 8){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("GUESSED!!");
display.setCursor(0,20);
display.println("YOU BEAT");
display.setCursor(0,40);
display.println("THE GAME");
display.display();
LCD.backlight();
LCD.clear();
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
LCD.setCursor(11,1);
LCD.print(n2);
LCD.setCursor(12,1);
LCD.print(n3);
delay(3000);
START=0;
}
if (digitalRead (LB) == HIGH && digitalRead(RB) == LOW){
while(digitalRead(RB) == LOW && START ==3){
//COME TO START
if (digitalRead (RB) == HIGH && digitalRead(LB) == HIGH){
GAME_LOOP();
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1);
display.setCursor(0,0);
display.println("SEE OTHER SCREEN");
display.setCursor(0,20);
display.println("PRESS LB TO CHOOSE");
display.setCursor(0,40);
display.println("PRESS RB TO ACCEPT");
display.display();
if(digitalRead (LB)==HIGH){
if(n3 == 9){
n3 = 0;
delay(500);
}else{
n3 = n3 + 1;
delay(500);
}
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n3);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
LCD.setCursor(11,1);
LCD.print(n2);
}else{
LCD.backlight();
LCD.clear();
LCD.setCursor(0,0);
LCD.print(n3);
LCD.setCursor(0,1);
LCD.print("PASSWORD:");
LCD.setCursor(10,1);
LCD.print(n1);
LCD.setCursor(11,1);
LCD.print(n2);
}
}
}
}