# 早鳥 EV3 ~ Python 學習手冊 (2)
責任編輯:Ryan
教練: 大叔
---
## 課程清單
1. 發光二極體 (LED)
2. 使用 EV3 的螢幕
3. 按鈕
4. 使用馬達
5. 遠端控制
6. 使用感測器
7. 喇叭和語音
8. 使用超音波
---
## 專題清單
1. Free Style 循紅線直行 (自由發揮)
2. 專業版循紅線直行
## 準備工作
每個 Python 程序都應該有一些基本部分。使用此模板開始:
```python=
#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.led import Leds
# TODO: 把程式碼加在這裡
```
第一行應該包含在為 ev3dev 編寫的每個 Python 程序中。它允許您從 Brickman 運行此程序,Brickman 是您在設備屏幕上看到的圖形菜單。其他行是 import 語句,使您可以訪問庫功能。如果要使用其他類型的設備或其他實用程序,則將所需類別加入即可。
## 總課程:常用 "from"
```python=
#Movetank 為雙輪同時控制, Movesteering 為進階,
from ev3dev2.motor import MediumMotor, LargeMotor, MoveTank, Movesteering, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D
# 陀螺儀感測器, 顏色、環境光感測器, 按鈕感測器, 超音波感測器, 紅外線感測器 (以上依序)
from ev3dev2.sensor.lego import GyroSensor, ColorSensor, TouchSensor, UltrasonicSensor, InfraredSensor
#可明確選擇你要的腳位(實例:雙顏色感測器)
from ev3dev2.sensor import INPUT_1, INPUT_2, INPUT_3 INPUT_4
#聲音函式庫
from ev3dev2.sound import Sound
# 按鈕函式庫
from ev3dev2.button import Button
#EV3's LED 函式庫
from ev3dev2.led import Leds
# 時間函式庫 # delay
from time import sleep
```
## 總課程:常用 "函式"
```python=
# XX = tag
#motor, 如欲使用movetank 請在()內加一個 speed (speed, speed2, ?)
XX.on(speed), .on_for_seconds(speed, seconds)
.on_for_rotations(speed, rotation), .on_for_degrees(speed, degrees)
#sensor
```
## 課程一:發光二極體 (LED)
```python=
ts = TouchSensor() # 取用 Touch Sensor 資訊
leds = Leds() # 取用 LED 資訊
print("Press the touch sensor to change the LED color!")
while True: # 無窮迴圈
if ts.is_pressed: # 如果 TouchSensor 被按下
leds.set_color("LEFT", "GREEN") # 設定左邊的 LED 為綠色
leds.set_color("RIGHT", "GREEN") # 設定右邊的 LED 為綠色
else: # 否則
leds.set_color("LEFT", "RED") # 設定左邊的 LED 為紅色
leds.set_color("RIGHT", "RED") # 設定右邊的 LED 為紅色
```
## 課程二:使用 EV3 的螢幕
## 課程三:按鈕
### 讓我們先看看 LEGO MINDSTORM 的做法
* 
* 上圖是選擇要偵測哪個按鈕被觸發
* 
* 上圖是選擇偵測按鈕的觸發動作;0= 鬆開,1= 按壓,2= 碰撞
### 再看看 EV3 Python 的做法
1. 加入 Button & Sound 的函式庫
2. 取得 Button & Sound 的狀態
3. 判斷那個按鈕被按下
4. 實驗1:按下任一 Button 嗶一聲
```python=
from ev3dev2.sound import Sound # 匯入 Sound 到模組
from ev3dev2.button import Button # 匯入 Button 到模組
sound = Sound() # 取得 Sound 的資訊
btn = Button() # 取得 Button 的資訊
print('Press any button')
while True:
if btn.any(): # 偵測是否按下任意按鈕
sound.play_tone(1500, 1) # 播放聲音 頻率1500 1秒
```
5. 實驗2:
* 按下 Left button 嗶一聲 頻率1000
* 按下 Right button 嗶兩聲 頻率2000
* 按下 Up 或 Down button 嗶一聲 頻率3000
* 同時按下 上下左右 button 嗶三聲 頻率4000
```python=
from ev3dev2.sound import Sound # 匯入 Sound 到模組
from ev3dev2.button import Button # 匯入 Button 到模組
from time import sleep
sound = Sound() # 取得 Sound 的資訊
btn = Button() # 取得 Button 的資訊
print('Press any button')
while True:
if btn.check_buttons(buttons=['left']): # 偵測是否按下左邊按鈕
sound.play_tone(1000, 1) # 播放聲音 頻率1000 1秒
if btn.check_buttons(buttons=['right']): # 偵測是否按下右邊按鈕
sound.play_tone(2000, 1)
sound.play_tone(2000, 1)
if btn.check_buttons(buttons=['up']) or btn.check_buttons(buttons=['down']): # 偵測是否按下上或下邊按鈕
sound.play_tone(3000, 1)
if btn.check_buttons(buttons=['right','left','up','down']): # 偵測是否同時按下上下左右的按鈕
sound.play_tone(4000, 0.1)
sound.play_tone(4000, 0.1)
sound.play_tone(4000, 0.1)
sleep(0.1)
```
## 課程四:使用馬達
實驗1: 按一下 Touch Sensor 就啟動馬達
```python=
ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下
lmA.on(speed=70) # 馬達 A 開啟速度70
lmB.on(speed=70) # 馬達 B 開啟速度70
```
實驗2: 按一下 Touch Sensor 就啟動馬達,再按一下就停止馬達
## 課程五:遠端控制
## 課程六:使用感測器
實驗1: 按一下 Touch Sensor 就啟動馬達,直到紅線停止。(可重複啟動)
```python=
from ev3dev2.sound import Sound # 匯入 Sound 到模組
from ev3dev2.button import Button # 匯入 Button 到模組
from time import sleep
from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.sensor.lego import ColorSensor
ts = TouchSensor()
lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊
lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊
sound = Sound() # 取得 Sound 的資訊
btn = Button() # 取得 Button 的資訊
print('Ready')
color_sensor = ColorSensor()
ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下
lmA.on(speed=70) # 馬達 A 開啟速度70
lmB.on(speed=70) # 馬達 B 開啟速度70
while True:
text = color_sensor.color_name # 取得顏色的名稱
if text == 'Red': # 如果顏色是紅色
lmA.off() # 馬達 A 關閉
lmB.off() # 馬達 B 關閉
ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下
lmA.on(speed=70) # 馬達 A 開啟速度70
lmB.on(speed=70) # 馬達 B 開啟速度70
```
實驗2: 掃地機器人
* 環境:80cm * 80cm 紅色框框,Robot 在框框內掃地且不能超出紅色範圍
```python=
from ev3dev2.sound import Sound # 匯入 Sound 到模組
from ev3dev2.button import Button # 匯入 Button 到模組
from time import sleep
from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.sensor.lego import ColorSensor
ts = TouchSensor()
lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊
lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊
sound = Sound() # 取得 Sound 的資訊
btn = Button() # 取得 Button 的資訊
print('Ready')
color_sensor = ColorSensor()
ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下
lmA.on(speed=40) # 馬達 A 開啟速度70
lmB.on(speed=40) # 馬達 B 開啟速度70
while True:
text = color_sensor.color_name # 取得顏色的名稱
if text == 'Red': # 如果顏色是紅色
lmA.off() # 馬達 A 關閉
sleep(1) # 等待一秒鐘
lmA.on(speed=40) # 馬達 A 開啟速度70
```
## 課程七:
## 專題製作
### Free Style 循紅線直行 (自由發揮)
```python=
from ev3dev2.sound import Sound # 匯入 Sound 到模組
from ev3dev2.button import Button # 匯入 Button 到模組
from time import sleep
from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.sensor.lego import ColorSensor
ts = TouchSensor()
lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊
lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊
sound = Sound() # 取得 Sound 的資訊
btn = Button() # 取得 Button 的資訊
print('Ready')
color_sensor = ColorSensor() # 取得 ColorSensor
ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下
lmA.on(speed=40) # 馬達 A 開啟速度70
lmB.on(speed=40) # 馬達 B 開啟速度70
while True:
text = color_sensor.color_name # 取得顏色的名稱
if text == 'Red': # 如果顏色是紅色
lmB.off() # 馬達 B 關閉
sleep(0.4) # 停止 0.4 秒
lmB.on(speed=50) # 馬達 B 開啟速度50
lmA.on(speed=20) # 馬達 A 開啟速度20
```
### 專業版循紅線直行
## 課程八:
## 函式庫文件:
https://python-ev3dev.readthedocs.io/en/ev3dev-stretch/