pwm関数は、論理obniz IOにPWM(パルス幅変調)信号を出力します。ピンを論理obniz IOの番号で指定するため、ESP32系の製品はもちろん、obniz Boardでも同じコードが動作します。
同時に出力できるPWMのチャンネル数には上限があります。pwm.start()を呼ぶたびにチャンネルを1つ確保し、pwm.stop()で解放します。
OS7.1.0以降
pwm.start(io)
指定したIOでPWM出力を開始します。
ピンはPWM用に確保され、出力へ切り替わります。初期値は周波数1,000Hz、デューティ比0%です。
引数
| 引数 | 型 | 説明 |
|---|---|---|
io |
number | 論理obniz IOの番号です。 |
返り値
数値のステータスコードを返します。
| 値 | 意味 |
|---|---|
0 |
開始に成功しました。すでにPWMが動作している場合も0です。 |
1 |
指定したIOの番号が不正です。 |
2 |
空きのPWMチャンネルがありません。 |
pwm.freq(io, hz)
PWM信号の周波数をヘルツで設定します。
周波数を変更すると、現在のデューティ比を自動で再適用します。
引数
| 引数 | 型 | 説明 |
|---|---|---|
io |
number | PWMを開始済みの論理obniz IOの番号です。 |
hz |
number | 周波数(ヘルツ)です。 |
返り値
数値のステータスコードを返します。
| 値 | 意味 |
|---|---|
0 |
設定に成功しました。 |
1 |
指定したピンでPWMが開始されていません。 |
2 |
指定した周波数が範囲外です(0、または80MHzを超える値)。 |
pwm.duty(io, percent)
PWM信号のデューティ比をパーセントで設定します。0未満や100を超える値は、その範囲に丸めます。
引数
| 引数 | 型 | 説明 |
|---|---|---|
io |
number | PWMを開始済みの論理obniz IOの番号です。 |
percent |
number | 0から100までのデューティ比です。 |
返り値
数値のステータスコードを返します。
| 値 | 意味 |
|---|---|
0 |
設定に成功しました。 |
1 |
指定したピンでPWMが開始されていません。 |
pwm.stop(io)
指定したピンのPWM出力を停止し、PWMチャンネルとIOピンの両方を解放します。
引数
| 引数 | 型 | 説明 |
|---|---|---|
io |
number | 論理obniz IOの番号です。 |
Example: LEDをゆっくり点滅させる
以下の例では、IO1につないだLEDのデューティ比を50ミリ秒ごとに変え、明るさをなめらかに上下させます。
local io_num = 1
local duty = 0
local step = 5
local tick = 0
os.log(" - Lua PowerOn");
-- 1kHz、デューティ比0%でPWMを開始
pwm.stop(io_num);
pwm.start(io_num);
pwm.freq(io_num, 1000);
pwm.duty(io_num, duty);
function on_offline_loop()
loop()
end
function on_online_loop()
loop()
end
function loop()
-- 50msごとにデューティ比を変えてLEDの明るさを上下させる
if tick + 50 < os.getTick() then
tick = os.getTick()
duty = duty + step
if duty >= 100 then
duty = 100
step = -step
elseif duty <= 0 then
duty = 0
step = -step
end
pwm.duty(io_num, duty)
end
end