Construa uma Calculadora Arduino com Display LCD 16x2 e Teclado
Componentes e Materiais
| Arduino UNO | × | 1 |
| Kit Shield LCD RGB 16x2 | × | 1 |
| Jumpers (genéricos) | × | 1 |
| Bateria 9V (genérica) | × | 1 |
| Protoboard (genérica) | × | 1 |
Sobre o Projeto
Ao final deste projeto, você saberá como usar um LCD 16x2 e teclado com Arduino e também como é fácil programá-los usando bibliotecas prontamente disponíveis. Você também entenderá como programar seu Arduino para realizar uma tarefa específica.
Materiais Necessários:
- Arduino Uno (qualquer versão funcionará)
- Display LCD 16×2
- Teclado 4×4
- Bateria 9V
- Protoboard e fios de conexão
Conexões
| D0 | 1º pino do teclado |
| D1 | 2º pino do teclado |
| D2 | 3º pino do teclado |
| D3 | 4º pino do teclado |
| D4 | 5º pino do teclado |
| D5 | 6º pino do teclado |
| D6 | 7º pino do teclado |
| D7 | 8º pino do teclado |
| D8 | Pino Register Select do LCD (pino 4) |
| D9 | Pino Enable do LCD (pino 6) |
| D10 | Pino Data 4 (pino 11) |
| D11 | Pino Data 4 (pino 11) |
| D12 | Pino Data 4 (pino 11) |
| D13 | Pino Data 4 (pino 11) |
| +5V | Conectado ao pino Vdd do LCD (pino 2) |
| GND | Conectado aos pinos Vss, Vee e RW do LCD (pinos 1, 3 e 5) |
Algumas placas Arduino podem mostrar erro durante upload se houver algo conectado aos pinos 0 e 1. Se isso acontecer, remova o teclado durante o upload do programa.
Uma vez feitas as conexões, seu hardware será parecido com isto:
Código
Calculadora com Teclado Arduino
/*
* Programa de Calculadora com Teclado Arduino
*/
#include <LiquidCrystal.h> // Biblioteca para LCD de https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> // Biblioteca para Teclado de https://github.com/Chris--A/Keypad
const byte ROWS = 4; // Quatro linhas
const byte COLS = 4; // Quatro colunas
// Definir o Keymap
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 ROW0, ROW1, ROW2, ROW3 do teclado a estes pinos do Arduino
byte colPins[COLS] = {4, 5, 6, 7}; // Conectar COL0, COL1, COL2, COL3 do teclado a estes pinos do Arduino
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Criar o Teclado
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pinos aos quais o LCD está conectado
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1, Num2, Number;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2); // Usando display LCD 16x2
lcd.print("DIY Calculator"); // Mensagem introdutória
lcd.setCursor(0, 1); // cursor na coluna 0, linha 1
lcd.print("-CircuitDigest"); // Mensagem introdutória
delay(2000); // Aguardar exibição
lcd.clear(); // Limpar
}
void loop() {
key = kpd.getKey(); // armazenar tecla pressionada em char
if (key != NO_KEY) DetectButtons();
if (result == true) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { // Se botão Cancelar pressionado
Serial.println("Button Cancel");
Number = Num1 = Num2 = 0;
result = false;
}
if (key == '1') { Serial.println("Button 1"); if (Number == 0) Number = 1; else Number = (Number * 10) + 1; }
if (key == '4') { Serial.println("Button 4"); if (Number == 0) Number = 4; else Number = (Number * 10) + 4; }
if (key == '7') { Serial.println("Button 7"); if (Number == 0) Number = 7; else Number = (Number * 10) + 7; }
if (key == '0') { Serial.println("Button 0"); if (Number == 0) Number = 0; else Number = (Number * 10) + 0; }
if (key == '2') { Serial.println("Button 2"); if (Number == 0) Number = 2; else Number = (Number * 10) + 2; }
if (key == '5') { Serial.println("Button 5"); if (Number == 0) Number = 5; else Number = (Number * 10) + 5; }
if (key == '8') { Serial.println("Button 8"); if (Number == 0) Number = 8; else Number = (Number * 10) + 8; }
if (key == '#') { Serial.println("Button Equal"); Num2 = Number; result = true; }
if (key == '3') { Serial.println("Button 3"); if (Number == 0) Number = 3; else Number = (Number * 10) + 3; }
if (key == '6') { Serial.println("Button 6"); if (Number == 0) Number = 6; else Number = (Number * 10) + 6; }
if (key == '9') { Serial.println("Button 9"); if (Number == 0) Number = 9; else Number = (Number * 10) + 9; }
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') { // Detectar botões na Coluna 4
Num1 = Number;
Number = 0;
if (key == 'A') { Serial.println("Addition"); action = '+'; }
if (key == 'B') { Serial.println("Subtraction"); action = '-'; }
if (key == 'C') { Serial.println("Multiplication"); action = '*'; }
if (key == 'D') { Serial.println("Division"); 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); } // Exibir resultado
lcd.setCursor(0, 1);
lcd.print(Number); // Exibir resultado
}
Esquemáticos
Processo de manufatura
- O Rolo de Massa: Das Origens Etruscas à Arte Moderna
- A Evolução e o Artesanato dos Pinos de Boliche Modernos
- Prevenção de Ataques USB HID: Demonstração de Exploração de Teclado com Arduino Leonardo
- Programe Facilmente a Série Atmel AT89 com Arduino Uno – Guia Passo a Passo
- Construa um Spybot Controlado por Bluetooth com Arduino
- Decodifique Sinais PPM de Receptor RC com Arduino: Guia Passo a Passo
- FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
- DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Controle de Ventoinha PWM 4 Pinos 25 kHz com Arduino Uno – Montagem, Código e Teste