Калькулятор на Arduino с 16x2 LCD и клавиатурой 4x4
Компоненты и материалы
| Arduino UNO | 1 |
| RGB LCD Shield Kit, 16x2 символов | 1 |
| Перемычки (набор) | 1 |
| Крона 9В | 1 |
| Макетная плата | 1 |
О проекте
В этом проекте вы научитесь работать с 16x2 LCD и матричной клавиатурой 4x4 на Arduino, используя готовые библиотеки. Также разберетесь, как программировать Arduino для решения конкретной задачи.
Необходимые материалы
- Arduino Uno (любая версия)
- 16×2 LCD дисплей
- 4×4 Матричная клавиатура
- Крона 9В
- Макетная плата и соединительные провода
Схема подключения (пины)
| Пин клавиатуры | Arduino Pin |
|---|---|
| 1 (R1) | D0 |
| 2 (R2) | D1 |
| 3 (R3) | D2 |
| 4 (R4) | D3 |
| 5 (C1) | D4 |
| 6 (C2) | D5 |
| 7 (C3) | D6 |
| 8 (C4) | D7 |
| LCD Pin | Arduino Pin |
|---|---|
| RS (4) | D8 |
| EN (6) | D9 |
| D4 (11) | D10 |
| D5 (12) | D11 |
| D6 (13) | D12 |
| D7 (14) | D13 |
| Vdd (2) | +5V |
| Vss, Vee, RW (1,3,5) | GND |
Важно: на некоторых платах Arduino загрузка скетча может завершиться ошибкой, если к пинам 0 и 1 (RX/TX) подключена клавиатура. В таком случае отключите клавиатуру во время загрузки.
Код
Arduino Calculator Sketch
/* Arduino Keypad Calculator */
#include <LiquidCrystal.h>
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
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};
byte colPins[COLS] = {4, 5, 6, 7};
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1 = 0, Num2 = 0, Number = 0;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2);
lcd.print("DIY Calculator");
lcd.setCursor(0, 1);
lcd.print("-CircuitDigest");
delay(2000);
lcd.clear();
}
void loop() {
key = kpd.getKey();
if (key != NO_KEY) DetectButtons();
if (result) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { Number = Num1 = Num2 = 0; result = false; }
else if (key >= '0' && key <= '9') {
if (Number == 0) Number = key - '0';
else Number = Number * 10 + (key - '0');
}
else if (key == '#') { Num2 = Number; result = true; }
else if (key == 'A' || key == 'B' || key == 'C' || key == 'D') {
Num1 = Number; Number = 0;
if (key == 'A') action = '+';
else if (key == 'B') action = '-';
else if (key == 'C') action = '*';
else if (key == 'D') action = '/';
delay(100);
}
}
void CalculateResult() {
switch(action) {
case '+': Number = Num1 + Num2; break;
case '-': Number = Num1 - Num2; break;
case '*': Number = Num1 * Num2; break;
case '/': Number = (Num2 != 0) ? Num1 / Num2 : 0; break;
}
}
void DisplayResult() {
lcd.setCursor(0, 0);
lcd.print(Num1); lcd.print(action); lcd.print(Num2);
if (result) { lcd.print(" ="); lcd.print(Number); }
lcd.setCursor(0, 1);
lcd.print(Number);
}
Схемы
Производственный процесс
- Валёк для теста: от этрусских истоков к современному мастерству
- Эволюция и мастерство современных кеглей для боулинга
- Защита от USB HID-атак: Демонстрация эксплойта клавиатуры на Arduino Leonardo
- Легкая прошивка микроконтроллеров Atmel AT89 с помощью Arduino Uno — пошаговое руководство
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- Декодирование PPM-сигнала RC-приёмника на Arduino: пошаговое руководство
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты