2013-10-14 113 views
1

我剛剛爲我的NXT 1.0安裝了leJOS,它工作得很好。我使用Eclipse來編寫代碼並將其上傳到該塊。我唯一的問題是,該塊完全忽略我的代碼:leJOS忽略我的循環

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

我會回答的評論,但我不認爲我能做到這一點,使之可讀..

我的猜測是,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正在恢復。

+0

感謝您在拳頭的幫助。 現在我知道觸摸傳感器似乎並沒有工作 也程序不會退出emidiatly爲什麼是這樣的:我不知道,但如果我註釋掉按鈕,它會再次關閉,而沒有做任何事情。 – Timbo

+0

我今晚教了我的lejos課......如果我有機會,我會玩代碼。 – TofuBeer

-1

你應該使用while循環,然後把你的if-else語句,像內 - 而(真){ 寫 代碼在這裏。 }

但在上述情況下,您的程序將永遠運行,不會停止。所以,如果你在while循環中給出一個條件,那更好。如果有任何疑問,我可以再次告訴你