1

我刚刚为我的 NXT 1.0 安装了 leJOS,它工作得很好。我正在使用 Eclipse 编写代码并将其上传到块中。我唯一的问题是该块完全忽略了我的代码:

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()命令,机器人会在我分配的等待时间内停止,然后在这两种情况下完全忽略我希望它观察触摸传感器被按下的情况。所有示例程序都可以工作,但我没有在其中找到循环,所以我认为我的循环有问题。有没有人可以帮忙??已经谢谢了

4

2 回答 2

0

我会作为评论回答,但我认为我不能这样做并使其可读..

我的猜测是在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返回的是什么。

于 2013-10-14T17:11:59.297 回答
-1

您应该使用 while 循环,然后将 if-else 语句放入其中,例如 - while (true) { 在此处编写代码。}

但在上述情况下,您的程序将永远运行,不会停止。所以,如果你在你的while循环中给出一个条件会更好。如果有任何疑问,我可以再告诉你

于 2016-12-19T14:13:49.623 回答