Digital Inputs
Para este proyecto, estudiamos el funcionamiento de los botones y el como pueden funcionar de formas diferentes (PULL_UP y PULL_DOWN), en primer lugar creamos un circuito con un botón, con el cual, al momento de accionarlo, se debía encender un LED con el código morse.
Como ultimo ejercicio, debíamos usar un keyboard para crear un juego de emparejamiento con ayuda de Arduino.
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x20,16,2); // Dirección I2C de la pantalla LCD
int LedVerde=2;
int score = 0;
int targetNumber = 0;
bool firstNumberEntered = false;
int LedVerde=2;
int score = 0;
int targetNumber = 0;
bool firstNumberEntered = false;
void setup() {
Serial.begin(9600);
pinMode(LedVerde, OUTPUT); // Establecer el pin del LED como salida
lcd.init(); // Inicializar la pantalla LCD
lcd.backlight(); // Encender la luz de fondo
lcd.setCursor(0, 0); // Establecer la posición del cursor en la primera línea
lcd.print("Teclado conectado"); // Mostrar mensaje en la pantalla LCD
delay(2000); // Esperar 2 segundos
lcd.clear(); // Limpiar la pantalla LCD
randomSeed(analogRead(0)); // Inicializar la generación de números aleatorios
}
Serial.begin(9600);
pinMode(LedVerde, OUTPUT); // Establecer el pin del LED como salida
lcd.init(); // Inicializar la pantalla LCD
lcd.backlight(); // Encender la luz de fondo
lcd.setCursor(0, 0); // Establecer la posición del cursor en la primera línea
lcd.print("Teclado conectado"); // Mostrar mensaje en la pantalla LCD
delay(2000); // Esperar 2 segundos
lcd.clear(); // Limpiar la pantalla LCD
randomSeed(analogRead(0)); // Inicializar la generación de números aleatorios
}
void loop() {
char key = customKeypad.getKey();
if (key) {
if (!firstNumberEntered) {
targetNumber = random(0, 10); // Generar un número aleatorio entre 0 y 9
Serial.print("Target Number: ");
Serial.println(targetNumber);
firstNumberEntered = true;
} else {
int enteredNumber = key - '0'; // Convertir el caracter a un número entero
if (enteredNumber == targetNumber) {
Serial.println("Correcto!");
lcd.println("Correcto!");
digitalWrite(LedVerde, HIGH); // Encender el LED verde
delay(1000); // Esperar 1 segundo
digitalWrite(LedVerde, LOW); // Apagar el LED verde
score++;
if (score == 5) {
lcd.clear();
lcd.print("¡Ganaste!");
delay(2000);
lcd.clear();
score = 0; // Reiniciar la puntuación después de ganar
}
} else {
Serial.println("Incorrecto!");
lcd.println("Incorrecto!");
score = max(0, score - 1); // Asegurarse de que la puntuación no sea negativa
}
delay(2000); // Esperar 2 segundos
lcd.clear();
lcd.print("Puntuacion: ");
lcd.print(score);
firstNumberEntered = false;
}
}
}
char key = customKeypad.getKey();
if (key) {
if (!firstNumberEntered) {
targetNumber = random(0, 10); // Generar un número aleatorio entre 0 y 9
Serial.print("Target Number: ");
Serial.println(targetNumber);
firstNumberEntered = true;
} else {
int enteredNumber = key - '0'; // Convertir el caracter a un número entero
if (enteredNumber == targetNumber) {
Serial.println("Correcto!");
lcd.println("Correcto!");
digitalWrite(LedVerde, HIGH); // Encender el LED verde
delay(1000); // Esperar 1 segundo
digitalWrite(LedVerde, LOW); // Apagar el LED verde
score++;
if (score == 5) {
lcd.clear();
lcd.print("¡Ganaste!");
delay(2000);
lcd.clear();
score = 0; // Reiniciar la puntuación después de ganar
}
} else {
Serial.println("Incorrecto!");
lcd.println("Incorrecto!");
score = max(0, score - 1); // Asegurarse de que la puntuación no sea negativa
}
delay(2000); // Esperar 2 segundos
lcd.clear();
lcd.print("Puntuacion: ");
lcd.print(score);
firstNumberEntered = false;
}
}
}