使用FileInputStream的GPIO输入的Java读取循环
我正在为GPIO驱动的字符单元LCD开发一个用户界面。我目前可以将文本写入屏幕,使用发送到GPIO的FileOutputStreams没有问题(这不在pi上;我不会使用pi4j GPIO库) 下一步是读取输入(比如说两个按钮)。以下是我如何向GPIOs写信:使用FileInputStream的GPIO输入的Java读取循环,java,multithreading,io,gpio,fileinputstream,Java,Multithreading,Io,Gpio,Fileinputstream,我正在为GPIO驱动的字符单元LCD开发一个用户界面。我目前可以将文本写入屏幕,使用发送到GPIO的FileOutputStreams没有问题(这不在pi上;我不会使用pi4j GPIO库) 下一步是读取输入(比如说两个按钮)。以下是我如何向GPIOs写信: public boolean setGP() { try (FileOutputStream out = new FileOutputStream(GPIO_X)) { out.write(VALUE_ON);
public boolean setGP() {
try (FileOutputStream out = new FileOutputStream(GPIO_X)) {
out.write(VALUE_ON);
out.flush();
return true;
} catch(Exception | Error e) {
System.out.println("Failed to Set " + e);
return false;
}
}
我现在想做的是为GPIO输入编写一个读循环,但我不熟悉创建一个while(true)循环,从fileInputStream中查找高值。我有一个用于读取GPIO的函数,但它只是一个用于检查值的函数:
public int readPin(int n){
try{
FileInputStream in = new FileInputStream("/sys/class/gpio" + n + "/value");
int i = in.read();
in.close();
return i==30 ? 0 : 1;
}catch (FileNotFoundException e){
e.printStackTrace();
return -1;
}catch (IOException e)
{
e.printStackTrace();
return -1;
}
}
我可以循环读这样的书吗?难道我不想要某种线程。睡眠(100)不会在这里以闪电般的速度无限循环,因为一个可能永远不会出现的按钮按下
public void tryRead(int n) {
try {
while(true) {
FileInputStream in = new FileInputStream("/sys/class/gpio" + n + "/value");
int i = in.read();
in.close();
if(i==30) {
//Register a button click
}else {
//do nothing
}
}
}catch(Error|Exception e) {
}
}
只要在底部的无限循环中寻找建议或错误,它运行得很快,没有任何用处,而不是等待一个高值。在上次读取循环中,我放入了完整的读取代码,但我只使用readPin函数