leJOS忽略了我的循环

时间:2013-10-14 16:58:08

标签: java eclipse nxt lego mindstorms

我刚为我的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()命令,机器人会在指定等待的时间内停止,而不是停止,在这两种情况下都要完全忽略,我希望它能够监视按下的触摸传感器。所有的示例程序都可以工作,但我没有在它们中找到循环,所以我认为我的循环存在问题。 有没有人能帮忙? 谢谢你

2 个答案:

答案 0 :(得分: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正在返回的内容。

答案 1 :(得分:-1)

您应该使用while循环,然后将if-else语句放在其中 - 而(真) { 在这里写代码。 }

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