我正在为Raspberry Pi创建一个门锁系统。当用户刷卡时,门使用以下代码解锁:
piface.getRelay(PiFaceRelay.K0).open();
我试图在门前创建一个5秒的延迟然后使用以下行锁定:
piface.getRelay(PiFaceRelay.K0).close();
这是我曾经尝试并执行5秒延迟的代码,但是当前它解锁然后立即再次锁定,这没有足够的时间让一个人物理推开门:
piface.getRelay(PiFaceRelay.K0).open();
Timer autoLockTimer = new Timer(5000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
piface.getRelay(PiFaceRelay.K0).close();
}
});
autoLockTimer.setInitialDelay(5000);
autoLockTimer.setRepeats(false);
autoLockTimer.start();
我想我只是没有正确使用计时器。任何建议都将不胜感激。
答案 0 :(得分:1)
为什么不简单(从头开始):
new Thread(new Runnable() {
public void run() {
piface.getRelay(PiFaceRelay.K0).open();
Thread.sleep(5000);
piface.getRelay(PiFaceRelay.K0).close();
}
}).start();
答案 1 :(得分:1)
你确定你有继电器API吗? PiFacExample,java使用'close'打开上的继电器。
答案 2 :(得分:0)
事实证明原始问题中发布的代码块工作正常!
但是我也在监视一个数据库,如果DB中的锁定状态为真(它曾经是),它会自动触发一个锁定命令,并且会在刷卡解锁后立即执行。这也是在计时器上运行。
解决方案是在用户刷卡时停止监控命令,然后在解锁门5秒后恢复监控。
感谢大家的建议!