ラズパイ公式サイトのPicoシリーズのページからPicoのFritzing用データがダウンロードできたので
PicoでLチカしてみました
(上記リンク先のページ内でDownload Fritzing Partで検索するとPico, PicoW, Pico2のデータがダウンロードできます)
LEDを8つの往復順次点灯に挑戦

from machine import Pin
from utime import sleep
sleep_time = 0.1
led_num = [6, 7, 8, 9, 10, 11, 12, 13]
led = []
for i in range(8):
led.append(Pin(led_num[i], Pin.OUT))
def MoveRight():
for i in range(7):
led[i].on()
sleep(sleep_time)
led[i].off()
def MoveLeft():
for i in range(7, 0, -1):
led[i].on()
sleep(sleep_time)
led[i].off()
while True:
MoveRight()
MoveLeft()
複数のLEDを使うのに配列を使いましたが、Pythonに慣れていないので led 配列にピン番号を入れる部分、何度もエラーが出ました
set は何が出来ないとか list は何が出来ないとか、むつかしい。慣れるのかなあ。。。
その他は特に変わった事はしてません。MoveRight() で led[0] から led[6] まで順次点灯、sleep_time 後に消灯。MoveLeft() で led[7] から led[1] まで逆順に点灯、sleep_time後に消灯。
スマホのカメラで撮ったらシャッタースピードの関係か?消灯した部分に残像が残ります。
面白いので実際に残像が残るようなプログラムにしてみました。
from machine import Pin, PWM
from utime import sleep
sleep_time = 0.1
led_num = [6, 7, 8, 9, 10, 11, 12, 13]
pwm = []
for i in range(8):
pwm.append(PWM(led_num[i]))
pwm[i].freq(1000)
pwm[i].duty_u16(0)
def MoveRight():
for i in range(7):
pwm[i].duty_u16(65536)
if i >= 1:
pwm[i - 1].duty_u16(16384)
if i >= 2:
pwm[i - 2].duty_u16(4096)
if i >= 3:
pwm[i - 3].duty_u16(0)
sleep(sleep_time)
def MoveLeft():
for i in range(7, 0, -1):
pwm[i].duty_u16(65536)
if i <= 6:
pwm[i + 1].duty_u16(16384)
if i <= 5:
pwm[i + 2].duty_u16(4096)
if i <= 4:
pwm[i + 3].duty_u16(0)
sleep(sleep_time)
while True:
MoveRight()
MoveLeft()
直接見ると全然違うのですが、動画にすると違いが分かりにくい。残念。
点灯した LED の1つ手前をやや暗く、さらに1つ手前をもっと暗く点灯させています。
はじめは1つ手前を1/2(duty_u16 = 32768)、もう1つ手前をさらに1/2(duty_u16 = 16384)の明るさにしましたが、これくらいでは明かるさの差があまり出ませんでした。

コメント