html5
1 / 17

LEGO 講義 2

LEGO 講義 2. 1. 光感 sensor 範例 2. 聲感 sensor 範例 3. 觸碰 sensor 範例 4. 超音波 sensor 範例 5. Multithreading 與 #define 範例. 1. 光感 SENSOR 範例. 光感 sensor 範例. 直接以內建程式測試: 開機後選擇 View > Reflected light ,將光感 sensor 接到對應的 port(1~4) ,選擇後會亮紅光。 將 sensor 靠近欲判斷之處,螢幕上會顯示讀數,可做為寫程式時所需數值的參考依據。

Télécharger la présentation

LEGO 講義 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LEGO 講義2 1. 光感sensor範例 2. 聲感sensor範例 3. 觸碰sensor範例 4. 超音波sensor範例 5. Multithreading 與 #define範例

  2. 1. 光感SENSOR範例

  3. 光感sensor範例 • 直接以內建程式測試: • 開機後選擇View > Reflected light,將光感sensor接到對應的port(1~4),選擇後會亮紅光。 • 將sensor靠近欲判斷之處,螢幕上會顯示讀數,可做為寫程式時所需數值的參考依據。 • 程式讀取到的單位為百分比,不需加%。

  4. 光感sensor範例 #include "NXCDefs.h" #define THRESHOLD 40 // 定義常數 task main() { SetSensorLight(IN_1);// 先宣告光感在第一個port while (true) { if (Sensor(IN_1) > THRESHOLD) // 若光感讀值大於40% OnFwd(OUT_A, 30); // 以30% power正轉 else Off(OUT_A); // 關閉接在port A 的馬達。 Wait(20); } } 範例程式:

  5. 2. 聲感SENSOR範例

  6. 聲感sensor範例 • 直接以內建程式測試: • 開機後選擇View > Sound dB,將聲感sensor接到對應的port(1~4) 。 • 將sensor靠近欲判斷之聲源,螢幕上會顯示讀數,可做為寫程式時所需數值的參考依據。 • 程式讀取到的單位為百分比,不需加%。

  7. 聲感sensor範例 #include "NXCDefs.h" #define THRESHOLD 80 // 定義常數 task main() { SetSensorSound(IN_1);// 先宣告聲感在第一個port while (true) { if (Sensor(IN_1) > THRESHOLD) // 若聲感讀值大於80% OnFwd(OUT_A, 30); // 以30% power正轉 else Off(OUT_A); // 關閉接在port A 的馬達。 Wait(20); } } 範例程式:

  8. 3. 觸碰SENSOR範例

  9. 觸碰sensor範例 • 直接以內建程式測試: • 開機後選擇View> Touch,將觸碰感測器接到對應的port(1~4) 。 • 用手試著按壓,螢幕上會顯示讀數,1表示按住,0表示放開。可做為寫程式時所需數值的參考依據。 • 注意,實作中有時可能因為由側面按壓,沒按到底而無法成功感應觸碰。

  10. 觸碰sensor範例 #include "NXCDefs.h" task main() { SetSensor(IN_1,SENSOR_TOUCH);// 先宣告觸碰感測器在第一個port while (true) { if (Sensor(IN_1) == 1) // 若按下觸碰感測器 OnFwd(OUT_A, 30); // 以30% power正轉 else Off(OUT_A); // 關閉接在port A 的馬達。 Wait(20); } } 範例程式:

  11. 4. 超音波SENSOR範例

  12. 超音波sensor範例 • 直接以內建程式測試: • 開機後選擇View> Ultrasonic cm,將超音波sensor接到對應的port(1~4) 。 • 螢幕上會顯示超音波讀數,sensor藉由超音波反射測量距離。單位可選擇公分或英吋,範圍約0~255 cm,精準度不高。 • 超音波會受反射方向與介面特性影響,因此可能會讀入非預期之數值。超音波在各物體間的多次反射也有可能造成誤判。

  13. 超音波sensor範例 #include "NXCDefs.h" #define NEAR 20 // 預設為 cm task main() { SetSensorLowspeed(IN_1);// 先宣告超音波在第一個port while (true) { if (SensorUS(IN_1) > NEAR) // 若距離大於20 cm OnFwd(OUT_A, 30); // 以30% power正轉 else Off(OUT_A); // 關閉接在port A 的馬達。 Wait(20); } } 範例程式:

  14. 5. MULTITHREADING 與 #DEFINE範例

  15. Multithreading & #define 範例 • 利用#define定義函數的方法,是在每一行後面加上「\」,最後面的大括號「}」後面不用加「\」。 • 利用函數Precedes(task1_name, task2_name, …, taskN_name); 可以達到的類似平行處理的效果。 • 下面範例程式的功能為A、B兩顆馬達朝不同方向轉動。

  16. Multithreading & #define 範例 #include "NXCDefs.h" #define OnFwdNew(int port, int power) {\ while(true) { \ if (Sensor(IN_1) == 1) {\ OnFwd(port, power); \ Wait(4000); \ break; \ } \ } \ } task A() { OnFwdNew(OUT_A, 30); } task B() { OnFwdNew(OUT_B, -30); } task main() { SetSensor(IN_1,SENSOR_TOUCH); Precedes(A,B); } 範例程式:

  17. 實驗練習 請同學以事先組好的輪型機器人,加上光感sensor,做出可沿著桌面黑線移動的機器人。 Bonus:另外加上聲音sensor,以拍掌聲控制機器人開始運作、暫停的功能。例如機器人一開始是靜止,拍一下手掌便開始沿著黑線走,再拍一下暫停動作,再拍一下又繼續行走這樣。

More Related