Inhaltsverzeichnis:

Ein Pin 4×4 Tastatur - Gunook
Ein Pin 4×4 Tastatur - Gunook

Video: Ein Pin 4×4 Tastatur - Gunook

Video: Ein Pin 4×4 Tastatur - Gunook
Video: How does a 4x4 keypad work 2024, Dezember
Anonim
Ein Pin 4×4 Tastatur
Ein Pin 4×4 Tastatur

Jedes Mal, wenn ich eine Tastatur sehe, kommt sie mit vielen Pins, es ist eine große Verschwendung Ihrer Arduino-Pins, also können wir eine Tastatur mit einem und nur einem Pin betreiben?. Die Antwort ist hier.

Schritt 1: Stückliste

Stückliste
Stückliste

Hardware:

01 Arduino UNO

02 Steckbretter

01 LCD mit I2C

16 Drucktasten

04 Widerstände 1,5 kΩ

04 Widerstände 620 Ω

04 Widerstände 220 Ω

08 Widerstände 100 Ω

01 Widerstand 1 kΩ

07 Überbrückungsdrähte

Software:

Arduino IDE auf Ihrem PC installiert

Schritt 2: Schema und Cicruit

Schaltplan und Übersicht
Schaltplan und Übersicht
Schaltplan und Übersicht
Schaltplan und Übersicht

Die Idee dahinter ist, dass wir eine 4*4-Matrix von Drucktasten haben, die vertikal mit der rechten Leitung und horizontal mit der anderen Leitung (der Tasterleitung) mit der Masse verbunden sind, und Widerstände von 1,5 kΩ, 620Ω, 220Ω und 100Ω, die Enden von die 4 Reihen sind durch vier 100Ω-Widerstände verbunden, wie im Schaltplan gezeigt.

Jedes Mal, wenn Sie eine Taste drücken, schließen Sie den Stromkreis und der Strom fließt durch einen anderen Pfad und eine andere Widerstandskette, weshalb Pin A0 für jeden Taster einen anderen analogen Messwert erhält. Alles, was Sie jetzt brauchen, ist Codieren.

Schritt 3: Der Code

#enthalten

#enthalten

LiquidCrystal_I2C lcd(0x3f, 20, 4);

int-Taste = A0;

int-Lesewert;

Void-Setup ()

{

Serial.begin (9600);

lcd.begin();

pinMode (Taste, EINGANG);

LCD-Rücklicht();

lcd.print("Hallo Welt");

Verzögerung (2000);

lcd.clear();

lcd.print ("Ein Pin 4 * 4 Tastatur");

Verzögerung (2000); }

Leere Schleife ()

{

readvalue = analogRead (Schaltfläche);

Serial.println (readvalue);

if (readvalue==852){lcd.clear();lcd.print("A");}

else{ if (readvalue==763){lcd.clear();lcd.print("B");}

else { if (readvalue==685) {lcd.clear();lcd.print("C");}

else { if (readvalue==965) {lcd.clear();lcd.print("D");}

Else{ if (readvalue==565) {lcd.clear();lcd.print("9");}

else { if (readvalue==614) {lcd.clear();lcd.print("6");}

else{ if (readvalue==360){lcd.clear();lcd.print("3");}

else{ if (readvalue==335){lcd.clear();lcd.print("#");}

else{ if (readvalue==396){lcd.clear();lcd.print("8");}

else { if (readvalue==349) {lcd.clear();lcd.print("5");}

else { if (readvalue==235) {lcd.clear();lcd.print("2");}

else{ if (readvalue==279){lcd.clear();lcd.print("0");}

Else{ if (readvalue==452) {lcd.clear();lcd.print("7");}

else { if (readvalue==271) {lcd.clear();lcd.print("4");}

else{ if (readvalue==170){lcd.clear();lcd.print("1");}

else{ if (readvalue==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}}} }

Schritt 4: Korrektur der Werte

Korrektur von Werten
Korrektur von Werten

Wenn Sie den seriellen Monitor öffnen, wird ein Wert von 1023 angezeigt. Wenn Sie eine Taste drücken, erhalten Sie eine weitere Anzeige. Sie müssen diese Werte nehmen und einige Änderungen am Code vornehmen

Schritt 5: Projekt nach Kritik und Überprüfung

Projekt nach Kritik und Überprüfung
Projekt nach Kritik und Überprüfung

Es besteht kein Zweifel, dass wir alle hier sind, um zu lernen und unser Wissen zu teilen. Dank einiger Kommentare von einigen Leuten aus der Community, die sehr hilfreich waren, habe ich beschlossen, einige Anpassungen und Verbesserungen an meinem Projekt vorzunehmen:

Die Hardware:

Ich beschloss, alle Komponenten in einer Leiterplatte zu löten, um das Problem einer schlechten Verbindung in den Steckbrettern zu vermeiden.

Der Code:

Ein Freund hat mir geraten, eine Software-Entprellung zu verwenden, und es ist nur eine Schleife ("for"-Schleife zum Beispiel), damit das Programm einige Zeit braucht, um einen Lesevorgang auszuwählen nur der letzte.

for (i=1; i<= 500; i++) {// nimm nur den 500. analogread

value = analogRead(Button);} // das hilft, etwas Zeit in Anspruch zu nehmen und schlechte Messwerte zu vermeiden

Ein anderer Freund riet mir dank ihm, "readvalue" mit einem Wertebereich zu vergleichen, nicht mit einem, da "readvalue" viele Werte für denselben Druckknopf benötigt. Das "A" zum Beispiel gibt einen Lesewert von: 849, 850, 851 852, 853, 854, 855, also ein Bereich von 7 Werten: ein Schwellenwert (852) und 3 Werte links und rechts. was wir hier tun müssen, ist den absoluten Wert der Differenz zwischen "readvalue" und "852" mit "3" zu vergleichen.

if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}

Schritt 6: Nach einigen Lötarbeiten

Nach einigen Lötarbeiten
Nach einigen Lötarbeiten
Nach einigen Lötarbeiten
Nach einigen Lötarbeiten
Nach einigen Lötarbeiten
Nach einigen Lötarbeiten

Schritt 7: Der Moment der Wahrheit

Wie Sie sehen können, verwirrt das Programm manchmal die Tasten, aber es funktioniert immer noch, theoretisch ist mit der Schaltung nichts falsch, aber der Code benötigt mehr Kalibrierung.

Schritt 8: Das Ende

Ich hoffe, dass Ihnen dieses Projekt gefällt und Sie versuchen, es zu tun, vielleicht werden Sie es besser machen als ich.

Fragen Sie mich, wenn Sie Fragen haben, hinterlassen Sie Kommentare und vergessen Sie nicht, für mich zu stimmen, wenn Sie das mögen.

Empfohlen: