top of page

MODI + Python - 進階物聯網編程簡介 (3):控制輸出模組


先前我們介紹過如何使用 Python 和 PyMODI 讀取任何輸入模組的讀數,而本文將會重點講解如何控制輸出模組。目前 MODI 有 LED、揚聲器、電機、顯示模組四種輸出模組,以下將會逐一介紹。


LED 模組 (LED Module)

LED 模組透過控制紅、綠、藍 (RGB) 三種顏色的混合配搭來顯示不同的顏色,而每種顏色以一個 0 ~ 100 範圍內的數字表示。不過很多時候會以 0~ 255 的範圍來代表,例如以下幾種常見顏色的 RGB Code:

我們可以按比例由 0 ~ 255 範圍的 RGB 數值投放到 0 ~ 100 的範圍。在 PyMODI API 中,我們可以透過以下代碼輕易更改 LED 模組的 RGB 數值使其發出橙光:

import modi

bundle = modi.MODI()
led = bundle.leds[0]

led.red = 255 * 100 / 255         // scaling 255 to 0 ~ 100 range
led.green = 165 * 100 / 255       // scaling 165 to 0 ~ 100 range
led.blue = 0                      

我們亦可以同時更改 RGB 三種顏色的數值:

led.rgb = 100, 0, 100             

揚聲器模組 (Speaker Module)

揚聲器模組能夠以不同的音量 (volume) 發出不同的音調 (pitch) ,而每個音調則是以頻率 (frequency) 來表示。下圖顯示了不同的音符所代表的頻率:

PyMODI 中的 Speaker class 裡面有一個名為「tune」的 property,用以控制頻率和音量。在這裡頻率和音量的單位分別是 Hz 和 %。例如 40% 的音量即代表最大可發出音量的 40%。以下是一個簡單的使用例子以 70% 的音量發出 880Hz 的音調,即上圖的 A5:

import modi

bundle = modi.MODI()
speaker = bundle.speakers[0]

speaker.frequency = 880        // frequency 880Hz
speaker.volume = 70            // 70% volume

類似於 LED 模組,我們亦可以同時設定頻率和音量:

speaker.tune = 880, 70        // frequency 880 Hz at 70% volume

如果我們想揚聲器模組停止發出聲音,可以使用 turn_off 函數:

speaker.turn_off()

電機模組 (Motor Module)

每個 MODI 電機模組可以控制兩個電機,所以 PyMODI 提供用於控制電機模組的函數中分為 first_ 以及 second_ 開頭,分別代表控制第一個以及第二個電機。


MODI 的電機模組一共有兩種控制模式:位置控制 (Position Control) 以及 速度控制 (Speed Control)。顧名思意,前者直接控制電機的轉動角度位置,而後者則控制電機的轉動速度。角度的控制範圍為 0 ~ 100 度而速度的範圍為 -100 ~ 100 %。


以下代碼分別控制每個電機到不同的角度:


import modi

bundle = modi.MODI()
motor = bundle.motors[0]

motor.first_degree = 50
motor.second_degree = 100

亦可以同時控制兩個電機的角度:

motor.degree = 50, 100

而以下代碼則顯示了如何實現速度控制:

motor.first_speed = 100
motor.second_speed = -30

或者

motor.speed = 100, -30

顯示模組 (Motor Module)

顯示模組可以顯示任意字串(最多27個字節):

import modi

bundle = modi.MODI()
display = bundle.displays[0]

display.text = 'MODI Display Module'

也可以在指定的位置(坐標)顯示指定的數字,例如在 (20, 30) 的位置顯示 1 :

display.show_variable(1, 20, 30)

此處的 20 是指 X 坐標,即水平位置,而 30 是指 Y 坐標,即垂直位置。

如果需要清空畫面,可以利用 clear 函數:

display.clear()

59 次查看0 則留言

Comments


bottom of page