저는 nodejs에 익숙하지 않습니다. 그리고 LCD 패널과 4x4 멤브레인 매트릭스 키패드를 Raspberry Pi에 연결하고 Node.js를 사용하여 프로그래밍했습니다. 내가 원하는 것은 키를 누를 때마다 즉시 LCD 패널에 표시되어야하고 #을 누르면 입력을 중단해야한다는 것입니다. 이를 위해비동기 함수가 while 루프 내부에서 즉각적인 결과를 생성하지 않습니다.
나는 패키지 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) 루프를 사용할 수 없습니다. 그렇기 때문에 exfple에 대한 키 누름에주의해야 할 이벤트가 있습니다. 'rpio.poll()'을 확인하십시오. 두 개의 for 반복문이 어떻게 작동하는지,'rpio.write()'와'rpio.read()'가 거기에서 활용되는 방식을 완전히 이해하지 못하기 때문에 코드를 다시 쓸 수 없다. – Thomas
나는' col'과'row'는 어떤 종류의 비트 마스크를 포함합니다! – Thomas