#154Новичок

Сканер Knight Rider на Pico (6 светодиодов туда-обратно)

Классический эффект светодиодного сканера Knight Rider на Pico! 6 светодиодов бегут слева направо, затем справа налево, и так бесконечно. Как передняя решётка машины KITT из культового сериала 80-х. Этот проект — доработка проекта «Бегущие огни»: та же схема из 6 светодиодов (GP9–GP14), но другой узор в коде. Изучи функцию reversed() для разворота списка, два отдельных цикла for для движения туда-обратно и несколько анимаций на одной схеме.

0.0(0)
13 собрано
Сканер Knight Rider на Pico (6 светодиодов туда-обратно)
Помнишь свет, который бегал туда-сюда по передней части говорящей машины из того старого сериала? Один из шести светодиодов на Raspberry Pi Pico доходит до одного края, разворачивается и возвращается снова и снова без остановки. Здесь ты видишь, как, зажигая несколько светодиодов по порядку, а затем в обратном порядке, можно создать ощущение движения.

Видео

Схема

Сканер Knight Rider на Pico (6 светодиодов туда-обратно) - Circuit

Исходный код

MicroPython
1# ─────────────────────────────────────────
2#   BlueGrays · bluegrays.com
3#   Сканер Knight Rider на Pico (6 светодиодов туда-обратно)
4# ─────────────────────────────────────────
5# 6 светодиодов бегут от GP9 до GP14, затем обратно от GP14 до GP9;
6# классический сканер «Knight Rider». Та же схема, что #153, другой код.
7# Скорость задаётся через WAIT_MS.
8#
9# Пины:
10#   GP9, GP10, GP11, GP12, GP13, GP14 -> 6 красных светодиодов (по порядку)
11#   Каждый светодиод с 220 ohm, катоды к GND
12
13from machine import Pin
14from time import sleep_ms
15
16# ============ ПИНЫ ============
17LED_PINS = [9, 10, 11, 12, 13, 14]               # Прямой порядок
18leds = [Pin(p, Pin.OUT) for p in LED_PINS]       # Все как выходы
19
20WAIT_MS = 100      # Пауза между светодиодами (мс)
21
22# ============ ПОМОЩНИК ============
23def all_off():
24    # Погасить все светодиоды
25    for led in leds:
26        led.value(0)
27
28# ============ ГЛАВНЫЙ ЦИКЛ ============
29while True:
30    # Вперёд: от GP9 до GP14
31    for led in leds:
32        all_off()
33        led.value(1)
34        sleep_ms(WAIT_MS)
35
36    # Назад: от GP14 до GP9 (обратный список)
37    for led in reversed(leds):
38        all_off()
39        led.value(1)
40        sleep_ms(WAIT_MS)
41

Частые вопросы

Что делает функция reversed()?

Она позволяет обходить список в обратном порядке. Первый цикл зажигает светодиоды слева направо, а второй, написанный через `reversed()`, — справа налево; так получается эффект бега туда-обратно.

Крайний светодиод будто мигает дважды — как это исправить?

Замени второй цикл на for led in leds[-2:0:-1]:. Так на обратном проходе пропускаются оба крайних светодиода, и ни один крайний светодиод не держится два шага подряд.

Можно ли сделать эффект со шлейфом (затуханием)?

Да, если через PWM постепенно приглушать светодиоды позади горящего, получится сканер со шлейфом, как у машины KITT.

Использует ли «Бегущий огонь» ту же схему, что и этот проект?

Да, схема точно такая же. Меняется только код; это учит писать разные анимации на одном и том же железе.