2017-10-07 49 views
1

所以我有一個問題編程微:位。我在互聯網頁面上編碼,然後下載十六進制文件並將其傳輸到micro:位。在互聯網模擬器上一切正常。顯然,當我把它轉移到微:位代碼不起作用。代碼非常簡單,看起來像這樣。可以在另一段時間內讀取微位:?

  • 動畫重複而變量爲0(這部分工作完全)

  • A按鈕使變量1,B使得2(這部分作品)

  • 當變量不爲0 ,它打破了第一個動畫循環。 (這部分也適用)

  • 然後進入第二循環,其重複而變量不爲0(這將永遠是一個0,因爲沒有按鍵,這使得變量0),因此它重複,直到永遠(這工作)

  • 在第二個循環中,還有2個循環。首先在變量爲1時重複,在變量爲2時重複。這讓我可以隨時在這兩個循環之間切換。 (問題出現在這裏:我在環2例如,我不能切換到第一回路和其它。)發生在微

所有這些錯誤:位機器人中,當代碼被傳送。在互聯網模擬器代碼完美的作品。是否有可能在微代碼中執行該代碼:我有沒有達到極限?還是機器人有缺陷?感謝您的回答,並告知我是否有不清楚的地方。

回答

1

這當然是非常難以調試,沒有看到任何塊/代碼,因爲我不知道如何檢測第二個循環時按下的按鈕。

但是,這可能是一個計劃問題,因爲您在按下按鈕時更改變量的方式。也許考慮重組你的街區,使他們更多的事件驅動,利用按鈕A按塊如好一點,無限循環總是最好避免。另外,也許可以考慮在while循環中放置一個暫停(100)

希望這有助於;)

編輯:

OP證實暫停(100)工作(見這個答案的評論),表明這是一個排序問題!

對於那些有興趣的人;) ...這是因爲CPU忙於執行while循環,並沒有時間去思考被按下的按鈕。 暫停(100)允許CPU休息一會兒,而不考慮while循環,給它處理按鈕按下所需的時間。這就是所謂的合作計劃!

您可以瞭解更多有關合作計劃在:

https://www.microbit.co.uk/device/reactive

+1

感謝您的回答,我會盡力分享結果。 –

+0

我在每個循環中添加了暫停(100),並且一切都很好。感謝解決方案。 –

+0

沒問題,很高興我能幫上忙。請參閱我爲編輯所做的修改。 –

-1

如果你的代碼看起來是這樣的,你將永遠無法改變你的狀態變量。你會陷在一個內部循環,沒有選項來改變控制變量:

while (unset): 
    Animate 
    Check for button 
While (set): // Intend to be stuck in this loop forever 
    While (one): 
    Do first 
    While (two): 
    Do Second 

你需要的是能夠更新您的狀態:

... 
    While (one): 
    Do First 
    if (button_b.was_pressed()): 
     state = two 
... 

這仍然是不完美的,你可能想要考慮如果按'不尋常'順序按下按鈕會發生什麼。模擬器應該是是相同的,但是可能會出現一些與按鈕按下的方式有關的異常情況,並且您的代碼已經破壞了模擬器。如果模擬器真的壞了,你需要與micro:bit團隊共享一個測試用例。

相關問題