Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
2.1.8 Tastatur
Einführung
Eine Tastatur ist ein rechteckiges Feld aus Tasten. In diesem Projekt werden wir sie nutzen, um Zeichen einzugeben.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Set zu kaufen. Hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können diese auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
- |
Schaltplan
Experimentelle Verfahren
Schritt 1: Bauen Sie den Schaltkreis.
Schritt 2: Öffnen Sie die Code-Datei.
cd ~/raphael-kit/nodejs/
Schritt 3: Ausführen.
sudo node keypad.js
Nachdem der Code ausgeführt wurde, werden die Werte der auf der Tastatur gedrückten Tasten (Tastenwert) auf dem Bildschirm angezeigt.
Code
const Gpio = require('pigpio').Gpio;
var rowsPins = [18,23,24,25];
var colsPins = [10,6,27,17];
var keys = ["1","2","3","A",
"4","5","6","B",
"7","8","9","C",
"*","0","#","D"];
for(let i=0;i<rowsPins.length;i++){
rowsPins[i] = new Gpio(rowsPins[i],{mode: Gpio.OUTPUT})
}
for(let i=0;i<colsPins.length;i++){
colsPins[i] = new Gpio(colsPins[i],{
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
edge: Gpio.RISING_EDGE
})
}
var last_key_pressed = 0;
var col=-1;
for(let i=0;i<colsPins.length;i++){
colsPins[i].on('interrupt',()=>{
col=i;
pressed_keys=keys[row*colsPins.length+col];
if(last_key_pressed!=pressed_keys){
console.log(`${pressed_keys}`);
}
last_key_pressed = pressed_keys;
});
}
var row=-1;
setInterval(() => {
row=(row+1)%rowsPins.length;
for(let i=0;i<rowsPins.length;i++){
rowsPins[i].digitalWrite(0);
}
rowsPins[row].digitalWrite(1);
}, 10);
Code-Erklärung
const Gpio = require('pigpio').Gpio;
var rowsPins = [18,23,24,25];
var colsPins = [10,6,27,17];
var keys = ["1","2","3","A",
"4","5","6","B",
"7","8","9","C",
"*","0","#","D"];
for(let i=0;i<rowsPins.length;i++){
rowsPins[i] = new Gpio(rowsPins[i],{mode: Gpio.OUTPUT})
}
for(let i=0;i<colsPins.length;i++){
colsPins[i] = new Gpio(colsPins[i],{
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
edge: Gpio.RISING_EDGE
})
}
Im Stil der Tastatur, deklarieren Sie zwei Sätze von Pins und eine Matrix.
Vier der Pins sind die Reihen der Tastatur, setzen Sie diese Pins in den OUTPUT-Modus; Die anderen vier Pins sind die Spalten der Tastatur, setzen Sie diese Pins in den INPUT-Modus und richten Sie für sie den Interrupt für die steigende Flanke ein.
Das Prinzip, wie der Hauptcontroller den Tastenwert erhält, ist wie folgt: Die vier Reihen-Pins liefern nacheinander ein hohes Signalniveau. Wenn eine Taste gedrückt wird, wird der entsprechende Spalten-Pin das vom Reihen-Pin freigesetzte hohe Niveau erhalten, welches den Interrupt der steigenden Flanke auslöst.
Zum Beispiel, wenn ich die Taste 3 drücke: Wenn die 2., 3. und 4. Reihe Pins das hohe Niveau freisetzen, gibt es keine Auswirkung; Wenn der Reihen-Pin in der ersten Position das hohe Niveau freigibt, wird der dritte Spalten-Pin in der Lage sein, das hohe Niveau zu erhalten und den Interrupt der steigenden Flanke auszulösen. Zu diesem Zeitpunkt lösen die 1., 2. und 4. Spalten-Pins keine Ereignisse aus.
Dann, entsprechend dem 1. Reihen-Pin, der das hohe Niveau freigibt, und dem 3. Spalten-Pin, der das hohe Niveau erhält, wird der Hauptcontroller wissen können, dass die Position der gedrückten Taste (1,3) ist, was der Taste 3 entspricht.
var row=-1;
setInterval(() => {
row=(row+1)%rowsPins.length;
for(let i=0;i<rowsPins.length;i++){
rowsPins[i].digitalWrite(0);
}
rowsPins[row].digitalWrite(1);
}, 10);
Die vier Reihen-Pins werden regelmäßig mit Hochpegel versorgt, und die Variable row wird verwendet, um den aktuell arbeitenden Reihen-Pin zu lokalisieren.
var col=-1;
for(let i=0;i<colsPins.length;i++){
colsPins[i].on('interrupt',()=>{
col=i;
// pressed_keys=keys[row*colsPins.length+col];
// if(last_key_pressed!=pressed_keys){
// console.log(`${pressed_keys}`);
// }
// last_key_pressed = pressed_keys;
});
}
Richten Sie Interrupt-Funktionen für die vier Spalten-Pins ein,
und die Variable col wird verwendet, um die Spalten-Pins zu lokalisieren, die das Ereignis des Interrupts der steigenden Flanke auslösen.
pressed_keys=keys[row*colsPins.length+col];
if(last_key_pressed!=pressed_keys){
console.log(`${pressed_keys}`);
}
last_key_pressed = pressed_keys;
Es gibt auch ein Stück Code in der Break-Funktion, um den spezifischen Tastenwert aus der keys Matrix entsprechend row und col zu erhalten.
Und jedes Mal, wenn Sie einen neuen Tastenwert erhalten, drucken Sie den Wert.
Phänomen-Bild