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