java - leJOS 忽略我的循环

标签 java eclipse nxt lego-mindstorms

我刚刚为我的 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/

相关文章:

firmware - 乐高头脑 Storm 1.0和2.0有什么区别

java - 以下 xml 需要 xslt 输出

java - Dagger 2 : no injector factory bound for fragment

Mac OS X Eclipse Neon 上的 Java 9 错误 "Target is not a JDK root. System library was not found."

eclipse - Visual Studio 的 Eclipse 按键绑定(bind)

Python 蓝牙密码/密码 Linux

java - String .replace() 不适用

Java通过动态访问公式访问Json属性

java - 在 Java 中解码 URI 查询字符串

eclipse - 使用 Eclipse 进行 CQ5 开发