6.7 Adivina el Número

¿Te sientes con suerte? ¿Quieres probar tu intuición y ver si puedes adivinar el número correcto? ¡Entonces no busques más allá del juego Adivina el Número!

Con este proyecto, puedes jugar un juego divertido y emocionante de azar.

Usando un control remoto IR, los jugadores ingresan números entre 0 y 99 para intentar adivinar el número de punto de suerte generado aleatoriamente. El sistema muestra el número de entrada del jugador en una pantalla LCD, junto con consejos de límite superior e inferior para ayudar a guiar al jugador hacia la respuesta correcta. Con cada adivinanza, los jugadores se acercan al número de punto de suerte, hasta que finalmente, alguien acierta y gana el juego.

Componentes Necesarios

Para este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit de Inicio ESP32

320+

ESP32 Starter Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DE COMPONENTES

ENLACE DE COMPRA

ESP32 WROOM 32E

BUY

Extensión de Cámara ESP32

-

Protoboard

BUY

Cables Puente

BUY

Receptor de Infrarrojos

BUY

I2C LCD1602

BUY

Esquemático

../../_images/circuit_6.7_guess_number.png

Cableado

../../_images/6.7_guess_receiver_bb.png

Código

Nota

  • Puedes abrir el archivo 6.7_guess_number.ino bajo la ruta de esp32-starter-kit-main\c\codes\6.7_guess_number directamente.

  • Las bibliotecas LiquidCrystal_I2C y IRremoteESP8266 se utilizan aquí, consulta Instalación Manual para obtener un tutorial de instalación.

  • Después de que el código se haya cargado con éxito, presiona cualquier botón numérico en el control remoto para iniciar el juego.

  • Ingresa un número usando los botones numéricos en el control remoto. Para ingresar un solo dígito, necesitas presionar la tecla ciclo para confirmar.

  • El sistema mostrará el número de entrada y los consejos de límite superior e inferior en la pantalla LCD.

  • Sigue adivinando hasta que adivines correctamente el número de punto de suerte.

  • Después de una adivinanza exitosa, el sistema mostrará un mensaje de éxito y generará un nuevo número de punto de suerte.

Nota

Si el código y el cableado son correctos, pero la LCD aún no muestra ningún contenido, puedes ajustar el potenciómetro en la parte posterior para aumentar el contraste.

¿Cómo funciona?

  1. En la función setup(), la pantalla LCD I2C y el receptor IR se inicializan. Luego llama a la función initNewValue() para generar un nuevo número de suerte aleatorio, y se muestra un mensaje de bienvenida en la pantalla LCD.

    void setup() {
        // Initialize the LCD screen
        lcd.init();
        lcd.backlight();
    
        // Start the serial communication
        Serial.begin(9600);
    
        // Enable the IR receiver
        irrecv.enableIRIn();
    
        // Initialize a new lucky point value
        initNewValue();
    }
    
  2. En la función loop, el código espera una señal del receptor IR. Cuando se recibe una señal, la función decodeKeyValue se llama para decodificar la señal y obtener el valor del botón correspondiente.

    void loop() {
    // If a signal is received from the IR receiver
    if (irrecv.decode(&results)) {
        bool result = 0;
        String num = decodeKeyValue(results.value);
    
        // If the POWER button is pressed
        if (num == "POWER") {
            initNewValue(); // Initialize a new lucky point value
        }
    
        // If the CYCLE button is pressed
        else if (num == "CYCLE") {
            result = detectPoint(); // Detect the input number
            lcdShowInput(result); // Show the result on the LCD screen
        }
    
        // If a number button (0-9) is pressed,
        //add the digit to the input number
        //and detect the number if it is greater than or equal to 10
        else if (num >= "0" && num <= "9") {
            count = count * 10;
            count += num.toInt();
            if (count >= 10) {
                result = detectPoint();
            }
            lcdShowInput(result);
        }
        irrecv.resume();
    }
    }
    
    • Dependiendo del valor del botón, se llama a la función apropiada. Si se presiona un botón numérico, la variable count se actualiza, y la función detectPoint se llama para detectar si el número de entrada es correcto. La función lcdShowInput se llama para mostrar el número de entrada y los consejos de límite superior e inferior en la pantalla LCD.

    • Si se presiona el botón POWER, la función initNewValue se llama para generar un nuevo número de punto de suerte y mostrar el mensaje de bienvenida en la pantalla LCD.

    • Si se presiona el botón CYCLE, la función detectPoint se llama para detectar si el número de entrada es correcto. La función lcdShowInput se llama para mostrar el número de entrada y los consejos de límite superior e inferior en la pantalla LCD.