Arduino-Rechner mit 16x2 LCD und Tastatur bauen
Komponenten und Materialien
| Arduino UNO | × | 1 |
| RGB LCD Shield Kit, 16x2 Zeichen Display | × | 1 |
| Jumper-Kabel (generisch) | × | 1 |
| 9V-Batterie (generisch) | × | 1 |
| Breadboard (generisch) | × | 1 |
Über dieses Projekt
Am Ende dieses Projekts wissen Sie, wie man ein 16x2 LCD und eine Tastatur mit Arduino verwendet und wie einfach es ist, sie mit den verfügbaren Bibliotheken zu programmieren. Sie verstehen auch, wie man den Arduino für eine bestimmte Aufgabe programmiert.
Benötigte Materialien:
- Arduino Uno (jede Version funktioniert)
- 16×2 LCD Display
- 4×4 Tastatur (Keypad)
- 9V-Batterie
- Breadboard und Verbindungsdrähte
Pinbelegung
| Arduino Pin | Verbindung |
|---|---|
| D0 | 1. Pin der Tastatur |
| D1 | 2. Pin der Tastatur |
| D2 | 3. Pin der Tastatur |
| D3 | 4. Pin der Tastatur |
| D4 | 5. Pin der Tastatur |
| D5 | 6. Pin der Tastatur |
| D6 | 7. Pin der Tastatur |
| D7 | 8. Pin der Tastatur |
| D8 | Register Select Pin des LCD (Pin 4) |
| D9 | Enable Pin des LCD (Pin 6) |
| D10 | Datenpin 4 (Pin 11) |
| D11 | Datenpin 5 (Pin 12) |
| D12 | Datenpin 6 (Pin 13) |
| D13 | Datenpin 7 (Pin 14) |
| +5V | Vdd Pin des LCD (Pin 2) |
| GND | Vss, Vee und RW Pin des LCD (Pin 1, 3, 5) |
Hinweis: Manche Arduino-Boards zeigen einen Fehler beim Hochladen, wenn Pins 0 und 1 belegt sind. Falls dies auftritt, Tastatur beim Hochladen abziehen.
Nach dem Verbinden sollte Ihre Hardware etwa so aussehen:
Code
Arduino Taschenrechner-Programm
/* Arduino Keypad Calculator Program */
#include <LiquidCrystal.h> // LCD-Bibliothek: https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> // Keypad-Bibliothek: https://github.com/Chris--A/Keypad
const byte ROWS = 4; // Vier Zeilen
const byte COLS = 4; // Vier Spalten
// Tastenbelegung definieren
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-ROW3 an diese Arduino-Pins
byte colPins[COLS] = {4, 5, 6, 7}; // Keypad COL0-COL3 an diese Arduino-Pins
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD-Pins
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 Calculator"); // Intro-Nachricht
lcd.setCursor(0, 1); // Spalte 0, Zeile 1
lcd.print("-CircuitDigest");
delay(2000); // 2 Sekunden warten
lcd.clear(); // Display löschen
}
void loop() {
key = kpd.getKey(); // Gedrückte Taste speichern
if (key != NO_KEY) DetectButtons();
if (result == true) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { // Abbrechen
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; }
// Spalte 4: Operatoren
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') {
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);
}
Schaltplan
Herstellungsprozess
- Das Nudelholz: Von etruskischen Ursprüngen bis zur modernen Handwerkskunst
- Die Entwicklung und Handwerkskunst moderner Bowling-Pins
- USB-HID-Angriffe verhindern: Arduino Leonardo Tastatur-Exploit Demo
- ATmel AT89-Serie mühelos mit Arduino Uno programmieren – Schritt-für-Schritt-Anleitung
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- RC-Empfänger PPM-Signal mit Arduino auslesen – Schritt-für-Schritt
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- 25-kHz-4-Pin-PWM-Lüftersteuerung mit Arduino Uno – Bau, Code & Test