#include <Wire.h> // Incluye la librería para comunicación I2C
#include <LiquidCrystal_I2C.h> // Incluye la librería para controlar la pantalla LCD con I2C
LiquidCrystal_I2C lcd(0x27, 20, 4); // Configura la pantalla LCD en la dirección I2C 0x27 y de tamaño 20x4
const int boton1 = 6; // Define el pin 6 para el botón 1
const int boton2 = 7; // Define el pin 7 para el botón 2
const int boton3 = 8; // Define el pin 8 para el botón 3
const int boton4 = 9; // Define el pin 9 para el botón 4
const int botonAvanzar = 10; // Botón para avanzar a la siguiente pregunta
const int ledVerde = 11; // Define el pin 11 para el LED verde
const int ledRojo = 12; // Define el pin 12 para el LED rojo
int preguntaActual = 0; // Variable para rastrear la pregunta actual
const int totalPreguntas = 10; // Número total de preguntas
int respuestaCorrecta[totalPreguntas] = {1, 2, 3, 0, 1, 3, 2, 0, 3, 1};
// Arreglo que almacena la opción correcta para cada pregunta
String preguntas[totalPreguntas] = {
"Quien es el autor de los rios profundos",
"Quien es el autor de Platero y Yo",
"Protagonista del Quijote",
"Conocido como el bibliotecario mendigo",
"Pregunta 5",
"Pregunta 6",
"Pregunta 7",
"Pregunta 8",
"Pregunta 9",
"Pregunta 10"
};
// Arreglo con los textos de las preguntas
String opciones[totalPreguntas][4] = {
{"Llosa", "Arguedas", "Eguren", "Albujar"},
{"Rodrigz", "Gamarra", "Jimenez", "Cervantz"},
{"Cordova", "Goyito", "Carmelo", "Sancho P"},
{"Palma", "Arguedas", "Vallejo", "Albujar"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"},
{"Opcion A", "Opcion B", "Opcion C", "Opcion D"}
};
// Arreglo bidimensional con las opciones para cada pregunta
void verificarRespuesta(int seleccion); // Declaración de la función verificarRespuesta
void siguientePregunta(); // Declaración de la función siguientePregunta
void setup() {
lcd.init(); // Inicializa la pantalla LCD
lcd.backlight(); // Enciende la luz de fondo de la pantalla
pinMode(boton1, INPUT); // Configura el pin del botón 1 como entrada
pinMode(boton2, INPUT); // Configura el pin del botón 2 como entrada
pinMode(boton3, INPUT); // Configura el pin del botón 3 como entrada
pinMode(boton4, INPUT); // Configura el pin del botón 4 como entrada
pinMode(botonAvanzar, INPUT); // Configura el pin del botón de avance como entrada
pinMode(ledVerde, OUTPUT); // Configura el pin del LED verde como salida
pinMode(ledRojo, OUTPUT); // Configura el pin del LED rojo como salida
lcd.clear(); // Limpia la pantalla LCD
mostrarPregunta(); // Muestra la primera pregunta
}
void loop() {
int seleccion = -1; // Variable para almacenar la selección del usuario
if (digitalRead(boton1) == LOW) seleccion = 0; // Si se presiona el botón 1, selecciona la opción 0
if (digitalRead(boton2) == LOW) seleccion = 1; // Si se presiona el botón 2, selecciona la opción 1
if (digitalRead(boton3) == LOW) seleccion = 2; // Si se presiona el botón 3, selecciona la opción 2
if (digitalRead(boton4) == LOW) seleccion = 3; // Si se presiona el botón 4, selecciona la opción 3
if (seleccion != -1) { // Si se ha seleccionado una opción
verificarRespuesta(seleccion); // Verifica si la opción seleccionada es correcta
delay(1000); // Espera 1 segundo para mostrar el resultado
digitalWrite(ledVerde, LOW); // Apaga el LED verde
digitalWrite(ledRojo, LOW); // Apaga el LED rojo
}
if (digitalRead(botonAvanzar) == LOW) { // Si se presiona el botón de avanzar
siguientePregunta(); // Pasa a la siguiente pregunta
delay(500); // Pequeña pausa para evitar rebotes en el botón
}
}
void mostrarPregunta() {
lcd.clear(); // Limpia la pantalla LCD
String pregunta = preguntas[preguntaActual];
// Mostrar la primera parte de la pregunta en la primera fila
lcd.setCursor(0, 0);
if (pregunta.length() > 20) {
lcd.print(pregunta.substring(0, 20)); // Muestra los primeros 20 caracteres
String segundaLinea = pregunta.substring(20); // La segunda línea de la pregunta
lcd.setCursor(0, 1);
lcd.print(segundaLinea); // Muestra la continuación de la pregunta
} else {
lcd.print(pregunta); // Muestra toda la pregunta si es más corta de 20 caracteres
}
// Mostrar las opciones de respuesta
lcd.setCursor(0, 2);
lcd.print("1:");
lcd.print(opciones[preguntaActual][0]); // Muestra la nueva opción 1
lcd.setCursor(10, 2);
lcd.print("2:");
lcd.print(opciones[preguntaActual][1]); // Muestra la nueva opción 2
lcd.setCursor(0, 3);
lcd.print("3:");
lcd.print(opciones[preguntaActual][2]); // Muestra la nueva opción 3
lcd.setCursor(10, 3);
lcd.print("4:");
lcd.print(opciones[preguntaActual][3]); // Muestra la nueva opción 4
}
void verificarRespuesta(int seleccion) {
if (seleccion == respuestaCorrecta[preguntaActual]) {
digitalWrite(ledVerde, HIGH); // Enciende el LED verde si la respuesta es correcta
} else {
digitalWrite(ledRojo, HIGH); // Enciende el LED rojo si la respuesta es incorrecta
}
}
void siguientePregunta() {
preguntaActual++; // Pasa a la siguiente pregunta
if (preguntaActual >= totalPreguntas) {
preguntaActual = 0; // Reinicia a la primera pregunta si se llega al final
}
mostrarPregunta(); // Muestra la siguiente pregunta
}