lego 講義 2

17
LEGO 講講 2 1. 光光 sensor 光光 2. 光光 sensor 光光 3. 光光 sensor 光光 4. 光光光 sensor 光光 5. Multithreading 光 #define 光光 1

Upload: connor-finch

Post on 03-Jan-2016

68 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: LEGO  講義 2

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

1

Page 2: LEGO  講義 2

1. 光感 SENSOR 範例

2

Page 3: LEGO  講義 2

光感 sensor 範例

• 直接以內建程式測試:

– 開機後選擇 View > Reflected light ,將光感 sensor 接到對應的 port(1~4) ,選擇後會亮紅光。

– 將 sensor 靠近欲判斷之處,螢幕上會顯示讀數,可做為寫程式時所需數值的參考依據。

– 程式讀取到的單位為百分比,不需加 % 。

3

Page 4: LEGO  講義 2

光感 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); }}

4

Page 5: LEGO  講義 2

2. 聲感 SENSOR 範例

5

Page 6: LEGO  講義 2

聲感 sensor 範例

• 直接以內建程式測試:

– 開機後選擇 View > Sound dB ,將聲感 sensor 接到對應的 port(1~4) 。

– 將 sensor 靠近欲判斷之聲源,螢幕上會顯示讀數,可做為寫程式時所需數值的參考依據。

– 程式讀取到的單位為百分比,不需加 % 。

6

Page 7: LEGO  講義 2

聲感 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); }}

7

Page 8: LEGO  講義 2

3. 觸碰 SENSOR 範例

8

Page 9: LEGO  講義 2

觸碰 sensor 範例• 直接以內建程式測試:

– 開機後選擇 View > Touch ,將觸碰感測器接到對應的 port(1~4) 。

– 用手試著按壓,螢幕上會顯示讀數, 1 表示按住, 0表示放開。可做為寫程式時所需數值的參考依據。

– 注意,實作中有時可能因為由側面按壓,沒按到底而無法成功感應觸碰。

9

Page 10: LEGO  講義 2

觸碰 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); }}

10

Page 11: LEGO  講義 2

4. 超音波 SENSOR 範例

11

Page 12: LEGO  講義 2

超音波 sensor 範例• 直接以內建程式測試:

– 開機後選擇 View > Ultrasonic cm ,將超音波sensor 接到對應的 port(1~4) 。

– 螢幕上會顯示超音波讀數, sensor 藉由超音波反射測量距離。單位可選擇公分或英吋,範圍約 0~255 cm ,精準度不高。

– 超音波會受反射方向與介面特性影響,因此可能會讀入非預期之數值。超音波在各物體間的多次反射也有可能造成誤判。

12

Page 13: LEGO  講義 2

超音波 sensor 範例

• 範例程式:#include "NXCDefs.h"#define NEAR 20 // 預設為 cmtask 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); }}

13

Page 14: LEGO  講義 2

5. MULTITHREADING 與 #DEFINE 範例

14

Page 15: LEGO  講義 2

Multithreading & #define 範例

• 利用 #define 定義函數的方法,是在每一行後面加上「 \ 」,最後面的大括號「}」後面不用加「 \ 」。

• 利用函數 Precedes(task1_name, task2_name, …, taskN_name); 可以達到的類似平行處理的效果。

• 下面範例程式的功能為 A 、 B 兩顆馬達朝不同方向轉動。

15

Page 16: LEGO  講義 2

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);}

16

Page 17: LEGO  講義 2

實驗練習

• 請同學以事先組好的輪型機器人,加上光感sensor ,做出可沿著桌面黑線移動的機器人。

• Bonus :另外加上聲音 sensor ,以拍掌聲控制機器人開始運作、暫停的功能。例如機器人一開始是靜止,拍一下手掌便開始沿著黑線走,再拍一下暫停動作,再拍一下又繼續行走這樣。

17