Ich bin neu bei nodejs und was ich getan habe ist, dass ich LCD Panel und 4x4 Membran Matrix Tastatur an Raspberry Pi angeschlossen habe und ich habe sie mit Node.js programmiert. Was ich erreichen möchte, ist, wenn eine Taste gedrückt wird, sollte es sofort auf dem LCD-Display angezeigt werden und wenn ich # drücke, sollte es keine Eingabe mehr machen.Asynchrone Funktion erzeugt kein sofortiges Ergebnis innerhalb der Schleife
Dazu habe ich Pakete LCD https://www.npmjs.com/package/lcd und RPIO https://github.com/jperkin/node-rpio verwendet und da ich ständig für Benutzereingaben müssen prüfen, habe ich den Code setzen Eingabe für die Aufnahme in while-Schleife & im Inneren, dass ich die print-Anweisung geschrieben haben, und das ist, wo die Problem wird kommen. Das LCD-Feld zeigt kein Zeichen an, wenn ich eine Taste auf der Tastatur drücke, aber wenn ich # drücke, wird das Programm beendet und alle Zeichen werden auf dem LCD-Feld angezeigt.
Der Code, den ich geschrieben habe, ist wie folgt.
var rpio = require('rpio');
var Lcd = require('lcd'),//This is asynchronous function
lcd = new Lcd({
rs: 18,
e: 23,
data: [24, 17, 27, 22],
cols: 8,
rows: 2
});
var matrix=[[1,2,3,'A'],
[4,5,6,'B'],
[7,8,9,'C'],
['*',0,'#','D']]
var row=[37,35,33,31];
var col=[29,23,40,38];
for (var i = 0; i < 4; i++) {
rpio.open(col[i], rpio.OUTPUT, rpio.HIGH);
}
for (var i = 0; i < 4; i++) {
rpio.open(row[i], rpio.INPUT, rpio.PULL_UP);
}
var code="";
var comeout=0;
lcd.on('ready', function() {
lcd.setCursor(0, 0);
//start of keypad code
while(true){
for (var j = 0; j < 4; j++) {
rpio.write(col[j],rpio.LOW);
for (var i = 0; i < 4; i++) {
if(rpio.read(row[i])==0){
console.log(matrix[i][j]);
lcd.print(matrix[i][j]);
if(matrix[i][j]=='#'){
comeout=1;
break;
}
while(rpio.read(row[i])==0);
}
}
if(comeout==1)
break;
else
rpio.write(col[j],rpio.HIGH);
}
if(comeout==1)
break;
}
//end of keypad code
});
// If ctrl+c is hit, free resources and exit.
process.on('SIGINT', function() {
lcd.clear();
lcd.close();
process.exit();
});
Jede Hilfe würde sehr geschätzt werden. Vielen Dank.
Ich würde vorschlagen, deinen Code in kleine Stücke zu brechen und auf das Problem zu konzentrieren. – niry
Sie können 'while (true)' Schleifen in JS nicht verwenden. Aus diesem Grund haben Sie Ereignisse, um zum Beispiel über Tastendrucke bemerkt zu werden. Schau dir 'rpio.poll()' an. Da ich nicht ganz verstehe, wie Ihre beiden for-Schleifen funktionieren und die 'rpio.write()' und 'rpio.read()', die Sie dort verwenden, kann ich Ihren Code nicht umschreiben. – Thomas
Ich vermute das col' und 'row' enthalten irgendeine Art von Bitmasken !? – Thomas