ナイ○ライダーの車っぽいLチカ

Python

ラズパイ公式サイトの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)の明るさにしましたが、これくらいでは明かるさの差があまり出ませんでした。

コメント

タイトルとURLをコピーしました