Construye una Calculadora Arduino con Pantalla LCD 16x2 y Teclado
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Pantalla LCD 16x2 (Kit Shield RGB) | 1 |
| Cables jumper (genéricos) | 1 |
| Batería 9V (genérica) | 1 |
| Protoboard (genérica) | 1 |
Descripción del Proyecto
Al final de este proyecto sabrá cómo usar una pantalla LCD 16x2 y un teclado con Arduino, y lo fácil que es programarlos usando las librerías disponibles. También entenderá cómo programar su Arduino para realizar una tarea específica.
Materiales Requeridos
- Arduino Uno (cualquier versión funciona)
- Pantalla LCD 16×2
- Teclado 4×4
- Batería 9V
- Protoboard y cables de conexión
Conexiones
| Pin Arduino | Conexión |
|---|---|
| D0 | 1er pin del teclado |
| D1 | 2º pin del teclado |
| D2 | 3er pin del teclado |
| D3 | 4º pin del teclado |
| D4 | 5º pin del teclado |
| D5 | 6º pin del teclado |
| D6 | 7º pin del teclado |
| D7 | 8º pin del teclado |
| D8 | Pin Register Select del LCD (pin 4) |
| D9 | Pin Enable del LCD (pin 6) |
| D10 | Pin Data 4 del LCD (pin 11) |
| D11 | Pin Data 5 del LCD (pin 12) |
| D12 | Pin Data 6 del LCD (pin 13) |
| D13 | Pin Data 7 del LCD (pin 14) |
| +5V | Pin Vdd del LCD (pin 2) |
| GND | Pines Vss, Vee y RW del LCD (pines 1, 3 y 5) |
Nota: Algunas placas Arduino pueden dar error al subir el programa si hay algo conectado a los pines 0 y 1. Si experimenta problemas, desconecte el teclado mientras sube el programa.
Una vez hechas las conexiones, su hardware se verá como en la imagen.
Código
Calculadora con Teclado Arduino
/* Programa Calculadora Teclado Arduino */
#include <LiquidCrystal.h> // Librería LCD: https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> // Librería Keypad: https://github.com/Chris--A/Keypad
const byte ROWS = 4; // Cuatro filas
const byte COLS = 4; // Cuatro columnas
// Definir el mapa de teclas
char keys[ROWS][COLS] = {
{'7','8','9','D'},
{'4','5','6','C'},
{'1','2','3','B'},
{'*','0','#','A'}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 }; // Conectar filas del teclado a estos pines Arduino
byte colPins[COLS] = { 4, 5, 6, 7 }; // Conectar columnas del teclado a estos pines Arduino
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Crear el Keypad
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pines a los que está conectado el LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1, Num2, Number;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2); // Usamos LCD 16x2
lcd.print("Calculadora DIY"); // Mensaje de presentación
lcd.setCursor(0, 1);
lcd.print("-CircuitDigest");
delay(2000);
lcd.clear();
}
void loop() {
key = kpd.getKey(); // Almacenar tecla pulsada en char
if (key != NO_KEY) DetectButtons();
if (result == true) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { // Botón Cancelar
Serial.println("Botón Cancelar");
Number = Num1 = Num2 = 0;
result = false;
}
if (key == '1') { Serial.println("Botón 1"); if (Number == 0) Number = 1; else Number = (Number * 10) + 1; }
if (key == '4') { Serial.println("Botón 4"); if (Number == 0) Number = 4; else Number = (Number * 10) + 4; }
if (key == '7') { Serial.println("Botón 7"); if (Number == 0) Number = 7; else Number = (Number * 10) + 7; }
if (key == '0') { Serial.println("Botón 0"); if (Number == 0) Number = 0; else Number = (Number * 10) + 0; }
if (key == '2') { Serial.println("Botón 2"); if (Number == 0) Number = 2; else Number = (Number * 10) + 2; }
if (key == '5') { Serial.println("Botón 5"); if (Number == 0) Number = 5; else Number = (Number * 10) + 5; }
if (key == '8') { Serial.println("Botón 8"); if (Number == 0) Number = 8; else Number = (Number * 10) + 8; }
if (key == '#') { Serial.println("Botón Igual"); Num2 = Number; result = true; }
if (key == '3') { Serial.println("Botón 3"); if (Number == 0) Number = 3; else Number = (Number * 10) + 3; }
if (key == '6') { Serial.println("Botón 6"); if (Number == 0) Number = 6; else Number = (Number * 10) + 6; }
if (key == '9') { Serial.println("Botón 9"); if (Number == 0) Number = 9; else Number = (Number * 10) + 9; }
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') { // Detectar botones columna 4
Num1 = Number;
Number = 0;
if (key == 'A') { Serial.println("Suma"); action = '+'; }
if (key == 'B') { Serial.println("Resta"); action = '-'; }
if (key == 'C') { Serial.println("Multiplicación"); action = '*'; }
if (key == 'D') { Serial.println("División"); action = '/'; }
delay(100);
}
}
void CalculateResult() {
if (action == '+') Number = Num1 + Num2;
if (action == '-') Number = Num1 - Num2;
if (action == '*') Number = Num1 * Num2;
if (action == '/') Number = Num1 / Num2;
}
void DisplayResult() {
lcd.setCursor(0, 0);
lcd.print(Num1);
lcd.print(action);
lcd.print(Num2);
if (result == true) { lcd.print(" ="); lcd.print(Number); }
lcd.setCursor(0, 1);
lcd.print(Number);
}
Esquemáticos
Diagrama de conexiones disponible en el proyecto original.
Proceso de manufactura
- El rodillo de cocina: de los orígenes etruscos a la artesanía moderna
- La Evolución y la Artesanía de los Bolos de Bolera Modernos
- Prevención de ataques USB HID: Demostración de explotación de teclado con Arduino Leonardo
- Programa fácilmente la serie Atmel AT89 con Arduino Uno – Guía paso a paso
- Construye un Spybot controlado por Bluetooth con Arduino
- Decodifica señales PPM de receptor RC con Arduino: Guía paso a paso
- FlickMote: Mando IR por gestos para Smart Home
- TV‑B‑Gone DIY con Arduino: Mando universal para apagar cualquier TV
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Convierte tu Teclado MIDI en Tutor de Piano Inteligente con Arduino, LEDs y MuseScore
- Control de Ventilador PWM de 4 Pines a 25 kHz con Arduino Uno – Montaje, Código y Pruebas