Funcionamiento
Este proyecto consiste en crear una calculadora utilizando un teclado matricial de 4×4 y una placa Arduino. El teclado matricial utilizará las siguientes letras para realizar operaciones aritméticas:
- a: Suma(+)
- b: Resta(-)
- c: Multiplicación(x)
- d: División(/)
- *: Igual(=)
El objetivo es permitir al usuario introducir expresiones matemáticas utilizando el teclado y obtener el resultado correspondiente.
Componentes
- 1 Arduino (por ejemplo, Arduino Uno)
- 1 Teclado matricial 4×4
- 1 Pantalla LCD (opcional, para mostrar resultados)
- Cables de conexión
- Protoboard (opcional)
Conexiones
- Fila 1 del teclado matricial a pin 9 del Arduino.
- Fila 2 del teclado matricial a pin 8 del Arduino.
- Fila 3 del teclado matricial a pin 7 del Arduino.
- Fila 4 del teclado matricial a pin 6 del Arduino.
- Fila 5 del teclado matricial a pin 5 del Arduino.
- Fila 6 del teclado matricial a pin 4 del Arduino.
- Fila 7 del teclado matricial a pin 3 del Arduino.
- Fila 8 del teclado matricial a pin 2 del Arduino.
Código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <Arduino.h> #include <Keypad.h> double calculateResult(double num1, double num2, char op); String getSymbol(char key); void clearData(); const byte ROWS = 4; // Cuatro filas const byte COLS = 4; // Cuatro columnas char keys[ROWS][COLS] = { {'1','2','3','a'}, {'4','5','6','b'}, {'7','8','9','c'}, {'*','0','#','d'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; // Conectar a las salidas de fila del teclado byte colPins[COLS] = {5, 4, 3, 2}; // Conectar a las salidas de columna del teclado Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); String inputString = ""; // para almacenar la cadena de entrada char operation; double num1, num2, result; void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ if (key >= '0' && key <= '9'){//Si la tecla pulsada es un numero inputString += key; Serial.print(key); } else if (key == 'a' || key == 'b' || key == 'c' || key == 'd'){//Si la tecla pulsada es una letra operation = key; num1 = inputString.toDouble(); inputString = ""; Serial.print(" "); Serial.print(getSymbol(key));//convierte las letras en simbolos(+,-,*,/) Serial.print(" "); } else if (key == '*'){//Si la tecla pulsada es un asteristo, realiza la operación num2 = inputString.toDouble(); inputString = ""; result = calculateResult(num1, num2, operation); Serial.print(" = "); Serial.println(result); } else if (key == '#'){ clearData(); } } } double calculateResult(double num1, double num2, char op){ switch(op){ case 'a': return num1 + num2; case 'b': return num1 - num2; case 'c': return num1 * num2; case 'd': return num1 / num2; default: return 0; } } String getSymbol(char key){ switch(key){ case 'a': return "+"; case 'b': return "-"; case 'c': return "*"; case 'd': return "/"; default: return " "; } } void clearData(){ inputString = ""; operation = 0; num1 = 0; num2 = 0; result = 0; Serial.println(" Datos borrados"); } |
Diseños

Videos
Nota
Este proyecto puede expandirse añadiendo una pantalla LCD para mostrar los resultados directamente en el dispositivo, mejorando la experiencia del usuario.