Arduino rekenmachine bouwen met 16x2 LCD en keypad
Onderdelen en benodigdheden
| Arduino UNO | 1 |
| RGB LCD Shield Kit, 16x2 Karakterdisplay | 1 |
| Jumper-draden (generiek) | 1 |
| 9V-batterij (generiek) | 1 |
| Breadboard (generiek) | 1 |
Over dit project
Aan het einde van dit project weet je hoe je een 16x2 LCD en keypad met Arduino gebruikt en hoe eenvoudig het is om ervoor te programmeren met de beschikbare bibliotheken. Je leert ook hoe je je Arduino programmeert voor een specifieke taak.
Benodigde materialen
- Arduino Uno (elke versie werkt)
- 16×2 LCD-display
- 4×4 Keypad
- 9V-batterij
- Breadboard en verbindingsdraden
Pin-aansluitingen
| Arduino-pin | Functie |
|---|---|
| D0 | 1e pin van toetsenbord |
| D1 | 2e pin van toetsenbord |
| D2 | 3e pin van toetsenbord |
| D3 | 4e pin van toetsenbord |
| D4 | 5e pin van toetsenbord |
| D5 | 6e pin van toetsenbord |
| D6 | 7e pin van toetsenbord |
| D7 | 8e pin van toetsenbord |
| D8 | Register select pin van LCD (pin 4) |
| D9 | Enable pin van LCD (pin 6) |
| D10 | Datapin 4 (pin 11) |
| D11 | Datapin 5 (pin 12) |
| D12 | Datapin 6 (pin 13) |
| D13 | Datapin 7 (pin 14) |
| +5V | Verbonden met Vdd-pin van LCD (pin 2) |
| GND | Verbonden met Vss, Vee en RW-pin van LCD (pin 1, 3 en 5) |
Sommige Arduino-borden kunnen een fout tonen tijdens het uploaden als er iets aan pin 0 en pin 1 zit. Als je dit ervaart, haal dan het keypad eraf tijdens het uploaden.
Zodra je verbindingen klaar zijn, ziet je hardware er ongeveer zo uit:
Code
Arduino Keypad Rekenmachine-programma
/*
* Arduino Keypad Rekenmachine Programma
*/
#include <LiquidCrystal.h> // Header voor LCD van https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> // Header voor Keypad van https://github.com/Chris--A/Keypad
const byte ROWS = 4; // Vier rijen
const byte COLS = 4; // Vier kolommen
// Keymap definiëren
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 }; // Keypad ROW0, ROW1, ROW2, ROW3 aan deze Arduino-pinnen
byte colPins[COLS] = { 4, 5, 6, 7 }; // Keypad COL0, COL1, COL2, COL3 aan deze Arduino-pinnen
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Keypad aanmaken
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pinnen waar LCD op aangesloten is
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1, Num2, Number;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2); // 16x2 LCD-display
lcd.print("DIY Rekenmachine"); // Intro-bericht
lcd.setCursor(0, 1); // Cursor naar kolom 0, regel 1
lcd.print("-CircuitDigest"); // Intro-bericht
delay(2000); // Wachten tot display info toont
lcd.clear(); // Wissen
}
void loop() {
key = kpd.getKey(); // Ingedrukte toets opslaan in char
if (key != NO_KEY) DetectButtons();
if (result == true) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { // Annuleren-knop
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') { // Kolom 4 detecteren
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);
}
lcd.setCursor(0, 1);
lcd.print(Number);
}
Schema's
Productieproces
- De Deegroller: Van Etrusken tot Moderne Vakmanschap
- De Evolutie en Vakmanschap van Moderne Bowlingpinnen
- Voorkomen van USB HID-aanvallen: Arduino Leonardo Toetsenbord-exploit Demo
- Atmel AT89-serie moeiteloos programmeren met Arduino Uno – Stapsgewijze handleiding
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- RC-ontvanger PPM-signalen decoderen met Arduino: Stapsgewijze handleiding
- FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
- DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Verander je MIDI-toetsenbord in een slimme pianotutor met Arduino, LEDs en MuseScore
- 25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test