我是nodejs的新手,我所做的是將LCD面板和4x4薄膜矩陣鍵盤連接到Raspberry Pi,並使用Node.js對它們進行編程。我想要實現的是每按一次按鍵,它應該立即顯示在液晶顯示屏上,當我按#時,它應該停止輸入。異步功能在循環內不產生直接結果
爲此,我已經使用的包LCD https://www.npmjs.com/package/lcd和RPIO https://github.com/jperkin/node-rpio,因爲我必須爲用戶輸入的連續檢查我已經把代碼同時輸入,同時循環&裏面我寫了打印語句,這是在問題即將到來。當按下鍵盤上的按鍵時,LCD面板不顯示任何字符,但當按#時,程序退出並且所有字符都顯示在LCD面板上。
我寫的代碼如下。
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();
});
任何幫助將不勝感激。謝謝。
我會建議打破你的代碼小塊,並專注於問題。 – niry
你不能在JS中使用'while(true)'循環。這就是爲什麼你有事件得到關注按鍵爲例。看看'rpio.poll()'。由於我不完全理解你的兩個for循環是如何工作的,以及你在那裏使用的'rpio.write()'和'rpio.read()',所以我不能重寫你的代碼 – Thomas
我猜' col'和'row'包含某種位掩碼!? – Thomas