Calculadora con Teclado 4×4 y Arduino

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.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compra