我刚刚为我的 NXT 1.0 安装了 leJOS,它运行得很好。我正在使用 Eclipse 编写代码并将其上传到 block 。我遇到的唯一问题是该 block 完全忽略我的代码:
import lejos.nxt.*;
public class Drive {
public static void main(String[] args) throws Exception {
TouchSensor touch = new TouchSensor(SensorPort.S1);
SoundSensor sound = new SoundSensor(SensorPort.S3);
Motor.A.setSpeed(1000);
Motor.B.setSpeed(1000);
Motor.A.forward();
Motor.B.forward();
/*try{
Thread.sleep(10000);
} catch (Exception e) {}
*/
if (touch.isPressed()) {
Motor.A.flt();
Motor.B.flt();
LCD.drawString("Done", 3, 4);
NXT.shutDown();
} else {
Motor.A.forward();
Motor.B.forward();
}
Button.waitForPress();
我将 Button.waitForPress();
放在那里,以便我可以检查程序实际执行的操作。
如果我在此配置中运行它,它会向前移动并继续运行,直到我按下按钮。如果我取消注释 Thread.sleep() 命令,机器人会按照我指定的等待时间进行操作,然后停止,在这两种情况下完全忽略我希望它监视触摸传感器的情况被压。所有示例程序都可以工作,但我没有在其中找到循环,所以我认为我的循环有问题。
有谁可以帮忙吗??
已经谢谢了
最佳答案
我会作为评论来回答,但我认为我无法做到这一点并使其可读......
我的猜测是,touch.isPressed()
在没有实际按下传感器的情况下返回 true。传感器不太可靠,并且可能未完全处于初始化状态。
我现在将代码更改为如下所示,只是为了调试问题:
Motor.A.setSpeed(1000);
Motor.B.setSpeed(1000);
Motor.A.forward();
Motor.B.forward();
if(touch.isPressed())
{
LCD.drawString("Pressed", 3, 4);
}
else
{
LCD.drawString("NOT Pressed", 3, 4);
}
Button.waitForAnyPress();
// rest of your code
这样您就可以 100% 确定 isPressed
返回的内容。
关于java - leJOS 忽略我的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365318/