Jestem nowy dla nodejs i to, co zrobiłem, to połączyłem panel LCD i matrycę matrycy membranowej 4x4 z Raspberry Pi i zaprogramowałem je za pomocą Node.js. To, co chcę osiągnąć, to naciśnięcie klawisza, który powinien być natychmiast wyświetlony na panelu LCD, a kiedy naciśniesz # powinien przestać pobierać dane wejściowe.Funkcja asynchroniczna nie produkuje natychmiastowego wyniku wewnątrz pętli
Do tego użyłem pakiety LCD https://www.npmjs.com/package/lcd i RPIO https://github.com/jperkin/node-rpio a ponieważ mam do ciągłego sprawdzania danych wejściowych użytkownika Włożyłem kod do podejmowania wejście w pętli while & wewnątrz że napisałem oświadczenie druku i że jest gdzie problem nadchodzi. Panel LCD nie wyświetla żadnych znaków po naciśnięciu klawisza na klawiaturze, ale gdy naciśniesz #, program wychodzi i wszystkie znaki są wyświetlane na panelu LCD.
Kod, który napisałem jest następujący.
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();
});
Każda pomoc będzie bardzo cenna. Dziękuję Ci.
Proponuję złamać kod na małe kawałki i skupić się na problemie. – niry
nie można używać pętli 'while (true)' w ten sposób w JS. Właśnie dlatego masz zdarzenia, które pozwolą Ci zauważyć, co się dzieje z klawiszami. Sprawdź 'rpio.poll()'. Ponieważ nie w pełni rozumiem, jak działają twoje pętle i 'rpio.write()' oraz 'rpio.read()', których tam używasz, nie jestem w stanie przepisać kodu – Thomas
Zgaduję, że ' col' i 'row' zawierają trochę bit-masks !? – Thomas