![35df974f34907b58067791c8ccf84553.png](https://img-blog.csdnimg.cn/img_convert/35df974f34907b58067791c8ccf84553.png)
点阵LED篮圈
使用RGB矩阵屏和电路python自己制作一个迷你红外感应环和LED记分板,可以让你在室内进行投篮游戏,并在64x32的LED矩阵屏上显示你的分数。
![91dec4c6b3dee6ddf6302c63d32a680f.png](https://img-blog.csdnimg.cn/img_convert/91dec4c6b3dee6ddf6302c63d32a680f.png)
红外感应圈
篮球圈内有一个红外阻断传感器,可以检测是否有球通过。3D打印部件将所有东西连接在一起,设计得很容易制作。有一个拱廊按钮在侧面,用于开始一个新的游戏和重新设置分数。这个产品是由一个Adafruit Feather M4 Express开发和RGB matrix FeatherWing驱动。
必备资料(指南)
- RGB LED矩阵指南
- Adafruit Feather M4 向导
- RGB点阵屏与电路python编程指南
黑色LED亚克力板用于LED光的扩散,另外可防止里面粗糙的线路过度暴露。这种材料的特点是哑光和有能力传输任何颜色的光。这使得它完美地展现了led颜色的饱和度。
3D打印框架在侧面设计了一个插槽,所以很容易插入一张黑色LED亚克力片。
零部件
Adafruit Feather M4 Express 开发板- Featuring ATSAMD51
![6cabd7c18692f058c3e8af4f186d5dfc.png](https://img-blog.csdnimg.cn/img_convert/6cabd7c18692f058c3e8af4f186d5dfc.png)
Adafruit RGB矩阵屏扩展板
![dd6f9da3dd77821570ed1d9c7be8f8cf.png](https://img-blog.csdnimg.cn/img_convert/dd6f9da3dd77821570ed1d9c7be8f8cf.png)
64x32 RGB LED矩阵屏- 4mm间距X1
![0264d4ded45abde3be717e46d565191e.png](https://img-blog.csdnimg.cn/img_convert/0264d4ded45abde3be717e46d565191e.png)
Adafruit STEMMA扬声器-即插即用音频放大器 X1
![6fbcc155557be6dc0e42507c69236c27.png](https://img-blog.csdnimg.cn/img_convert/6fbcc155557be6dc0e42507c69236c27.png)
迷你带LED灯拱廊按钮- 24mm半透明
![0814ef2f76173827ee5a8da3f11b7aea.png](https://img-blog.csdnimg.cn/img_convert/0814ef2f76173827ee5a8da3f11b7aea.png)
红外线(IR)阻断传感器(5mmLED) 1对
![43564a5ba1217637a07993907bbd7ad0.png](https://img-blog.csdnimg.cn/img_convert/43564a5ba1217637a07993907bbd7ad0.png)
红外线IR)阻断传感器(3mm LED) 1对
![5489f92048ceb7ac2572478b0d0c03c2.png](https://img-blog.csdnimg.cn/img_convert/5489f92048ceb7ac2572478b0d0c03c2.png)
JST PH2针电缆-母头 线长100mm 1条
![13777a58ebd0b096db7ef5e7fdc3d4ce.png](https://img-blog.csdnimg.cn/img_convert/13777a58ebd0b096db7ef5e7fdc3d4ce.png)
JST PH 2针电缆-公头 线长200mm 1条
![af87974154490714b49a6536c8515adb.png](https://img-blog.csdnimg.cn/img_convert/af87974154490714b49a6536c8515adb.png)
JST PH 3针插座 多色编码电缆- 线长200mm
![c31317b580d43be0d93e72d9b65c1551.png](https://img-blog.csdnimg.cn/img_convert/c31317b580d43be0d93e72d9b65c1551.png)
STEMMA JST PH 3针插座电缆- 200mm
![b9bbca36f13f243da719511b25a470d2.png](https://img-blog.csdnimg.cn/img_convert/b9bbca36f13f243da719511b25a470d2.png)
铜线排线 10线1米长- 28AWG黑色
![25df8af4e1fac78c5c89d3ae15544cca.png](https://img-blog.csdnimg.cn/img_convert/25df8af4e1fac78c5c89d3ae15544cca.png)
2.54间距排母座,12pin和16pin
![59a5d2758f0c664264474935d59f1d04.png](https://img-blog.csdnimg.cn/img_convert/59a5d2758f0c664264474935d59f1d04.png)
黑色尼龙螺柱和螺钉 M2.5
![6193308313013169785406c1b768d329.png](https://img-blog.csdnimg.cn/img_convert/6193308313013169785406c1b768d329.png)
黑色LED亚克力板
一片黑色的LED亚克力片用于RGB LED矩阵屏光线的扩散。
![4ba7866245ff7bbdf2a048e5902ef50d.png](https://img-blog.csdnimg.cn/img_convert/4ba7866245ff7bbdf2a048e5902ef50d.png)
当它没有被照亮的时候看起来像一个磨砂黑色亚克力片,但当有一个背光,它会发生改变。这种神奇的材料能够传输任何颜色的光。
建议切成这个尺寸:257mm x128mm
五金螺丝
用于固定3d打印零件的紧固件。
- M3×10毫米盘头螺钉 x8
- M3×6毫米盘头螺钉 x4
- M2.5 x 10mm盘头螺钉 x6
- M2.5六角螺母 x4
电路图
下图提供了组件连接的可视化参考。这个图是使用软件包 Fritzing割创建的。
Fritzing软件的Adafruit 专用库
使用Adafruit's Fritzing parts库为您的项目创建电路图。下载这个库或者抓取单独的部分。可以从GitHub - Adafruit Fritzing零件获得库和零件。
![c2809b399dfa832e2f727fe499c81ddd.png](https://img-blog.csdnimg.cn/img_convert/c2809b399dfa832e2f727fe499c81ddd.png)
导线连接说明
- 从扬声器的VCC到Feather开发板上的3V
- 连接扬声器GND到羽Feather开发析板的GND
- 连接扬声器信号到Feather开发板的A0
- 按钮一端连接Feather开发板上的GND
- 按钮另一端连接Feather开发板上的D4
- 红外阻断(2线)到Feather开发板上的GND
- 红外阻断(2线)到Feather开发板上的3V
- 红外阻断(3线)到Feather开发板上的GND
- 红外阻断(3线)到Feather开发板上的3V
- 红外阻断(3线)到Feather开发板上的A1
供电
RGB矩阵将需要由5V 4A适配器供电。5V USB线缆供电将不能完全显示-,RGB矩阵仅由USB线缆供电时将会显示故障。
![eb5adb30adfc9d4fd2a1502b934427ba.png](https://img-blog.csdnimg.cn/img_convert/eb5adb30adfc9d4fd2a1502b934427ba.png)
3D打印零件
用于3D打印的STL格式文件面向在FDM风格的机器上“按原样”打印。零件设计为3D打印,不需要任何支持材料。
![42357548b9f50ee5526f7b5113d8f38c.png](https://img-blog.csdnimg.cn/img_convert/42357548b9f50ee5526f7b5113d8f38c.png)
- hoop-190.stl
- hoop-204.stl
- foot a.stl
- foot b.stl
- hoop bracket a.stl
- hoop bracket b.stl
- 2x corner-a.stl
- 2x corner-b.stl
- speaker mount.stl
- button mount.stl
相关的3D打印文件可以从下面的链接下载:
https://www.thingiverse.com/thing:4543154
打印床
篮箍的最小建造面积为250毫米x 210毫米x 200毫米。提供两种尺寸。箍- 190。stl的外径为190mm。箍- 204。stl的外径为204mm。选择一个最适合您的打印机建立板。
![2da5bbcc4776fe9e0aa85d6d29565aec.png](https://img-blog.csdnimg.cn/img_convert/2da5bbcc4776fe9e0aa85d6d29565aec.png)
CAD装配
拐角安装在RGB矩阵显示器和附加的黑色LED亚克力片四周。两个脚架安装在拐角上,用和螺钉固定。一个按钮安装板被固定在显示器的一侧。环系在一组支架上,支架固定在两个安装脚上。Stemma音箱连接到安装板上并固定。
视频
知乎视频www.zhihu.com在Feather M4 Express开发板上使用CircuitPython编程
CircuitPython是MicroPython的一个衍生物,它的初衷是简化低成本微控制器的实验和教育。它使它比以往任何时候都更容易获得原型,无需预先下载桌面软件。在CIRCUITPY 驱动器简单地复制和编辑文件进行迭代更新程序。
下面的说明将向您展示如何安装CircuitPython。如果你已经安装了电路python,但正在寻找更新或重新安装它,同样的步骤也一样适用。
配置CircuitPython快速开始!
按照这个快速的一步一步来实现Python超级快速的能力:)
通过CircuitPython官网下载最新版的CircuitPython
CircuitPython - Feather M4 Express Downloadcircuitpython.org![00dfb4ea427b438f71c0df9ee157ef74.png](https://img-blog.csdnimg.cn/img_convert/00dfb4ea427b438f71c0df9ee157ef74.png)
单击上面的链接并下载最新的UF2文件。
下载并保存到您的桌面(或任何方便的地方)。
用一条确认好的USB电缆将你的 Feather M4开发板插入你的电脑的USB口。
很多人最终还是使用只能充电的USB线,这是非常令人沮丧的!因此,确保你有一个USB数据线,你知道这是有利于数据同步。
双击主板上USB连接器旁边的Reset按钮,你会看到NeoPixel RGB LED变成绿色。如果它变成红色,检查USB线,尝试另一个USB端口,等等。注意:USB接口旁边的红色小LED会发出红色脉冲。这是没问题的。
如果第一次双击不工作,再试一次。有时候要试几次才能找到正确的节奏!
您将看到一个名为FEATHERBOOT的新磁盘驱动器出现你的计算机中。
将dafruit_circuitpython_etc.uf2文件拖拽到FEATHERBOOT磁盘驱动器中。
![c1c40a32d8a1268f2029560f6942e48e.png](https://img-blog.csdnimg.cn/img_convert/c1c40a32d8a1268f2029560f6942e48e.png)
![a0752e8deb4adb9d952634deb7637646.png](https://img-blog.csdnimg.cn/img_convert/a0752e8deb4adb9d952634deb7637646.png)
LED灯会闪烁。然后,FEATHERBOOT 启动驱动器将消失,而另一个名为CIRCUITPY 新的磁盘驱动器称将出现。
就这样,你的程序下载就完成了!)
补充信息
有关安装CircuitPython的详细信息,请查看下面的链接:
https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpythonlearn.adafruit.com安装CircuitPython库包
我们在不断地更新和改进我们的库,所以我们不会(此时)在我们的CircuitPython板上附带完整的库包。相反,您可以在指南中找到依赖于外部库的示例代码。其中一些库可以从Adafruit获得,一些可能是社区成员写的!
无论哪种方式,当您开始研究CircuitPython时,您都想知道如何将库放到板上。
你可以通过点击下面的按钮来获取最新的Adafruit CircuitPython 包。
注意:要让你的包版本和CircuitPython 的版本相匹配,运行3.X版本的库对应CircuitPython 3, 4.x的任意版本,对应CircuitPython 4的任意版本等等。如果你把库和主要的CircuitPython版本混在一起,你很可能会因为在主要的版本变化期间库接口的变化而报错。
CircuitPython - Librariescircuitpython.org![230d442e1f30c164d91492912eed0350.png](https://img-blog.csdnimg.cn/img_convert/230d442e1f30c164d91492912eed0350.png)
如果你需要其它版本,你也可以访问bundle发布页面,在那里你可以选择你想要的版本,以及关于变更的信息。
无论哪种方式,下载与你的CircuitPython固件版本匹配的版本。如果您不知道版本,可以查看CircuitPython REPL中的初始提示符,它会报告版本。例如,如果您运行的是v4.0.1,请下载4。x库包。还有一个py包,它包含未压缩的python文件,除非您正在对库进行高级工作,否则您可能不希望使用它。
下载zip文件后,解压缩其内容。这通常是通过双击zip来完成的。在Mac OSX上,它将文件放在与zip文件相同的目录中。
![f3ce038aea89479e89c03fe01a3b1b3e.png](https://img-blog.csdnimg.cn/img_convert/f3ce038aea89479e89c03fe01a3b1b3e.png)
打开bundle文件夹。在里面你会发现两个信息文件和两个文件夹。一个文件夹是lib包,另一个文件夹是examples包。
![7b95deeeebdcc5aea973b5c97c07c1e6.png](https://img-blog.csdnimg.cn/img_convert/7b95deeeebdcc5aea973b5c97c07c1e6.png)
现在打开lib文件夹。当您打开文件夹时,您将看到很多mpy文件和文件夹
![6553808d9bf5ef759e7057515f97de7c.png](https://img-blog.csdnimg.cn/img_convert/6553808d9bf5ef759e7057515f97de7c.png)
示例文件
每个库中的所有示例文件现在都包含在包中,以及一个只包含示例的包中。包括这些主要有两个原因:
- 允许快速测试设备。
- 提供一个代码示例库,便于为特定目的而构建。
![b9cdb7636f45c8cb33cf8379454a4ec8.png](https://img-blog.csdnimg.cn/img_convert/b9cdb7636f45c8cb33cf8379454a4ec8.png)
复制库到你的开发板
首先,您需要在电路驱动器上创建一个lib文件夹。打开驱动器,右键单击,选择创建新文件夹的选项,并将其命名为lib,然后打开从下载的压缩文件中解压缩的lib文件夹。在里面你会发现许多文件夹和。mpy文件。找到您想要使用的库,并将其复制到circuit itpy上的lib文件夹。
这也适用于示例文件。它们仅作为原始的.py文件提供,因此如果遇到memoryerror错误,可能需要使用mpy-cross实用程序将它们转换为.mpy。这在CircuitPython基本指南中进行了讨论。用法与上述快速板部分中描述的相同。注意:如果不将示例放在单独的文件夹中,则需要从import语句中删除示例。
例如:由于丢失库而导入错误
如果选择在需要时加载库,可以编写代码尝试使用尚未加载的库。我们将演示当您尝试使用未加载到您的板上的库时会发生什么,并涵盖解决该问题所需的步骤。
如果您没有将所需的库加载到CIRCUITPY 驱动器的lib文件夹中,则此演示将返回一个错误。
让我们使用blinky示例的修改版本。
import board
import time
import simpleio
led = simpleio.DigitalOut(board.D13)
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
保存这个文件。你的开发板不会有什么变化。让我们检查串口控制台,看看发生了什么。
![785d9305aa68308cb5dd73652fb9eee5.png](https://img-blog.csdnimg.cn/img_convert/785d9305aa68308cb5dd73652fb9eee5.png)
我们有一个导入错误。它说没有名为“simpleio”的模块。这就是我们刚刚在代码中包含的代码!
单击上面的链接下载正确的包。从下载的包文件中解压缩lib文件夹。向下滚动找到simpleio.mpy。这就是我们要找的库文件!按照上面的步骤加载单独的库文件。
LED又开始闪烁了!让我们检查一下串品控制台。
![e81df7bb5995e64a2c5252d5c7e79b31.png](https://img-blog.csdnimg.cn/img_convert/e81df7bb5995e64a2c5252d5c7e79b31.png)
没有错误!太好了。你成功地解决了一个导入错误!
如果将来遇到这个错误,请按照上面的步骤,选择与丢失的库匹配的库。
在非Express 系列的开发板上安装库
如果您有一块Trinket M0或Gemma M0开发板,您需要按照上面示例中的相同步骤安装需要的库。你并不总是需要等待一个ImportError,因为你可能知道你在代码中添加了什么库。只需打开下载的lib文件夹,找到所需的库,并将其拖到电路驱动器上的lib文件夹。
即使只在需要时加载库,也可能会耗尽饰品M0或Gemma M0上的空间。您可以使用许多步骤来尝试解决此问题。您可以在您的板的学习指南中的故障排除页面中找到它们。
更新CircuitPython库/例子
库和示例会不定时更新,而且更新CIRCUITPY 驱动器上的文件很重要。
要更新单个库或示例,请遵循上面相同的步骤。当您将库文件拖动到lib文件夹时,它将询问您是否要替换它。选择是就行了。
每当有一个库的更新时,就会发布一个新的库包。更新包括bug修复和新特性。经常检入以查看您正在使用的库是否已经更新是很重要的。
LED矩阵记分牌编程
一旦你用CircuitPython完成了你的Feather M4 Express的设置,你可以将这些库添加到lib文件夹中:
- adafruit_bitmap_font
- adafruit_bus_device
- adafruit_display_shapes
- adafruit_display_text
- adafruit_imageload
然后,您可以单击下面代码顶部的Download: Project Zip链接来下载代码、位图、字体和.mp3文件。
import time
import board
import audioio
import audiomp3
import framebufferio
import rgbmatrix
import displayio
import adafruit_imageload
import digitalio
from adafruit_display_shapes.rect import Rect
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
# matrix setup
displayio.release_displays()
matrix = rgbmatrix.RGBMatrix(
width=64,
height=32,
bit_depth=4,
rgb_pins=[board.D6, board.D5, board.D9, board.D11, board.D10, board.D12],
addr_pins=[board.A5, board.A4, board.A3, board.A2],
clock_pin=board.D13,
latch_pin=board.D0,
output_enable_pin=board.D1,
)
display = framebufferio.FramebufferDisplay(matrix)
# display groups
start_group = displayio.Group(max_size=30, scale=1)
score_group = displayio.Group(max_size=30, scale=1)
# text & bg color setup for scoreboard
score_text = " "
font = bitmap_font.load_font("/Fixedsys-32.bdf")
yellow = (255, 127, 0)
pink = 0xFF00FF
score_text = label.Label(font, text=score_text, color=0x0)
score_text.x = 23
score_text.y = 15
score_bg = Rect(0, 0, 64, 32, fill=yellow, outline=pink, stroke=3)
# start splash screen graphic
start, start_pal = adafruit_imageload.load("/pixelHoops.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
start_grid = displayio.TileGrid(start, pixel_shader=start_pal,
width=64, height=32)
# adding graphics to display groups
start_group.append(start_grid)
score_group.append(score_bg)
score_group.append(score_text)
# start by showing start splash
display.show(start_group)
# setup for break beam LED pin
break_beam = digitalio.DigitalInOut(board.A1)
break_beam.direction = digitalio.Direction.INPUT
break_beam.pull = digitalio.Pull.UP
# setup for button pin
button = digitalio.DigitalInOut(board.D4)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
# setup for speaker pin
speaker = audioio.AudioOut(board.A0)
# mp3 decoder setup
file = "/hoopBloop0.mp3"
mp3stream = audiomp3.MP3Decoder(open(file, "rb"))
# state machines used in the loop
score = 0
hoops = False
button_state = False
beam_state = False
sample = 0
while True:
# button debouncing
if not button.value and not button_state:
button_state = True
# debouncing for break beam LED
if not break_beam.value and not beam_state:
beam_state = True
# if a game hasn't started and you press the button:
if not button.value and not hoops:
# game starts
hoops = True
button_state = False
# display shows scoreboard
display.show(score_group)
print("start game!")
time.sleep(0.5)
if hoops:
# if the break beam LED detects a hoop:
if not break_beam.value and beam_state:
# score increase by 2 points
score += 2
# an mp3 plays
file = "/hoopBloop{}.mp3".format(sample)
mp3stream.file = open(file, "rb")
speaker.play(mp3stream)
print("score!")
# resets break beam
beam_state = False
# increases mp3 file count
# plays the 3 files in order
sample = (sample + 1) % 3
# score text x pos if 4 digit score
if score >= 1000:
score_text.x = -1
# score text x pos if 3 digit score
elif score >= 100:
score_text.x = 7
# score text x pos if 2 digit score
elif score >= 10:
score_text.x = 16
elif score >= 0:
score_text.x = 23
# updates score text to show current score
score_text.text = score
time.sleep(0.01)
# if a game is in progress and you press the button:
if not button.value and hoops:
# game stops
hoops = False
button_state = False
# score is reset to 0
score = 0
score_text.text = score
# display shows the start splash graphic
display.show(start_group)
print("end game!")
time.sleep(0.5)
在您加载库、位图、字体、.mp3和code.py文件之后,您的Feather M4 Express电路驱动器应该看起来像这样:
![47f44e0cfd25a884def23745ac401b7d.png](https://img-blog.csdnimg.cn/img_convert/47f44e0cfd25a884def23745ac401b7d.png)
LED矩阵计分板代码解析
import time
import board
import audioio
import audiomp3
import framebufferio
import rgbmatrix
import displayio
import adafruit_imageload
import digitalio
from adafruit_display_shapes.rect import Rect
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
RGB矩阵是使用rgbmatrix库设置的。
# matrix setup
displayio.release_displays()
matrix = rgbmatrix.RGBMatrix(
width=64,
height=32,
bit_depth=4,
rgb_pins=[board.D6, board.D5, board.D9, board.D11, board.D10, board.D12],
addr_pins=[board.A5, board.A4, board.A3, board.A2],
clock_pin=board.D13,
latch_pin=board.D0,
output_enable_pin=board.D1,
)
display = framebufferio.FramebufferDisplay(matrix)
然后,创建两个显示组。一个组显示启动图形,另一个组显示游戏时的分数。
# display groups
start_group = displayio.Group(max_size=30, scale=1)
score_group = displayio.Group(max_size=30, scale=1)
下来将为记分牌设置文本(score_text)和彩色背景(score_bg)。文本使用的是位图字体。
# text & bg color setup for scoreboard
score_text = " "
font = bitmap_font.load_font("/Fixedsys-32.bdf")
yellow = (255, 127, 0)
pink = 0xFF00FF
score_text = label.Label(font, text=score_text, color=0x0)
score_text.x = 23
score_text.y = 15
score_bg = Rect(0, 0, 64, 32, fill=yellow, outline=pink, stroke=3)
在设置分数文本之后,使用adafruit_imageload库设置启动图形位图。
# start splash screen graphic
start, start_pal = adafruit_imageload.load("/pixelHoops.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
start_grid = displayio.TileGrid(start, pixel_shader=start_pal,
width=64, height=32)
启动位图和评分文本图形被添加到各自的显示组中。首先使用display.show(start_group)显示启动位图。
# adding graphics to display groups
start_group.append(start_grid)
score_group.append(score_bg)
score_group.append(score_text)
# start by showing start splash
display.show(start_group)
显示器安装完成后,阻断式红外LED、按钮和扬声器的I/O引脚安装完毕。使用audioio库将LED和按钮设置为输入,扬声器设置为AudioOut。
# setup for break beam LED pin
break_beam = digitalio.DigitalInOut(board.A1)
break_beam.direction = digitalio.Direction.INPUT
break_beam.pull = digitalio.Pull.UP
# setup for button pin
button = digitalio.DigitalInOut(board.D4)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
# setup for speaker pin
speaker = audioio.AudioOut(board.A0)
MP3Decoder是在循环之前设置的,类似于代码中早期的display对象设置。这有助于在播放多个。mp3文件时节省内存。注意,在本节中您没有播放。mp3,这纯粹是为了设置。
# mp3 decoder setup
file = "/hoopBloop0.mp3"
mp3stream = audiomp3.MP3Decoder(open(file, "rb"))
设置的最后一部分创建将在循环中使用的状态机。下面注释了它们的函数。
# state machines used in the loop
score = 0 # holds your score for the game
hoops = False # tracks if a game is active or not
button_state = False # button debouncing
beam_state = False # break beam LED debouncing
sample = 0 # file count for the mp3 files
循环开始与消除按钮和阻断式LED的抖动。这消除了从输入接收数据时的任何故障。
while True:
# button debouncing
if not button.value and not button_state:
button_state = True
# debouncing for break beam LED
if not break_beam.value and not beam_state:
beam_state = True
根据游戏是否正在进行,按钮有不同的功能。如果一个游戏还没有开始,然后按下按钮开始一个新的游戏,并改变显示,以显示记分牌图形。
# if a game hasn't started and you press the button:
if not button.value and not hoops:
# game starts
hoops = True
button_state = False
# display shows scoreboard
display.show(score_group)
print("start game!")
time.sleep(0.5)
如果hoops状态为真,游戏就会运行。每当break beam LED检测到一个break,你的分数增加2分,一个。mp3文件播放。
有三个不同的.mp3文件,它们按游戏进行的顺序播放。代码能够轻松地遍历文件,因为它们都命名为hoopBloop*。通过这样命名它们,您可以使用"/hoopBloop{}.mp3".format(sample)迭代它们,让sample保存数字。
代码引用了在循环之前为解码和播放.mp3文件而设置的mp3stream。
此外,还有一些文本格式,这取决于分数的位数。这样可以使得分在比赛中保持居中。
if hoops:
# if the break beam LED detects a hoop:
if not break_beam.value and beam_state:
# score increase by 2 points
score += 2
# an mp3 plays
file = "/hoopBloop{}.mp3".format(sample)
mp3stream.file = open(file, "rb")
speaker.play(mp3stream)
print("score!")
# resets break beam
beam_state = False
# increases mp3 file count
# plays the 3 files in order
sample = (sample + 1) % 3
# score text x pos if 4 digit score
if score >= 1000:
score_text.x = -1
# score text x pos if 3 digit score
elif score >= 100:
score_text.x = 7
# score text x pos if 2 digit score
elif score >= 10:
score_text.x = 16
# score text x pos if 1 digit score
elif score >= 0:
score_text.x = 23
# updates score text to show current score
score_text.text = score
time.sleep(0.1)
如果游戏正在进行中,你按下按钮,它会改变圆环状态为False并结束游戏。分数也被重置为0,并且显示启动位图。
# if a game is in progress and you press the button:
if not button.value and hoops:
# game stops
hoops = False
button_state = False
# score is reset to 0
score = 0
# display shows the start splash graphic
display.show(start_group)
print("end game!")
time.sleep(0.5)
篮圈组装
红外阻断接收器接线
使用两芯的的排线,长度为40厘米。这条线要很长,用来缠绕3D打印的钢圈。来自红外传感器的接地线和电压线是通过用两线带状电缆切割来扩展的。使用热收缩管绝缘暴露的电线。
![1303f9d0e5efb3648dcd63a6661c6a84.png](https://img-blog.csdnimg.cn/img_convert/1303f9d0e5efb3648dcd63a6661c6a84.png)
红外阻断发射器布线
用一根3线的JST电缆焊接到红外发射机的三根电线上。JST连接器允许传感器容易地连接和断开。使用热收缩管绝缘暴露的电线。
![72f08203eb18626767d4d78092878d4a.png](https://img-blog.csdnimg.cn/img_convert/72f08203eb18626767d4d78092878d4a.png)
红外阻断圈的连线
将红外断束接收器放入箍中并测量导线长度。它应该足够长,以环绕环的一半与额外松弛的结束连接到2线JST连接器。
![b904696e313e29696d8e3b7d688ac945.png](https://img-blog.csdnimg.cn/img_convert/b904696e313e29696d8e3b7d688ac945.png)
安全固定红外断束接收器
使用M2.5 x 10mm长的螺丝固定红外接收器到箍。将红外传感器压入滚轮末端的凹槽。固定M2.5螺丝时固定到位。LED应该朝向安装片朝上。
![b369b5981232663bafada69f4adc05fc.png](https://img-blog.csdnimg.cn/img_convert/b369b5981232663bafada69f4adc05fc.png)
穿线
3D打印箍的特点是有一个通道,可以在里面布线。这可以防止排线出现在游戏过程中。将电线插入并穿过其中一个通道。不管哪一边都是对称的。
![83818602f924edc9934e08adacc00bba.png](https://img-blog.csdnimg.cn/img_convert/83818602f924edc9934e08adacc00bba.png)
放线孔
通道有一个开口,几乎穿过环箍的一半,以便接近接线。这有助于在接线上提供一个支撑,以便将接线进一步绕到环箍的一半。
![29521b93c9a10fea94cbba2bd17a443b.png](https://img-blog.csdnimg.cn/img_convert/29521b93c9a10fea94cbba2bd17a443b.png)
出口孔
继续从红外接收器穿线,直到它穿过另一端。小心地将接线穿过最靠近通道出口的孔。
![c0514cbffa3d9fadddf7077a66d7a505.png](https://img-blog.csdnimg.cn/img_convert/c0514cbffa3d9fadddf7077a66d7a505.png)
安装红外接收器
仔细检查电线是否已完全拉过。电线应该绕到环箍的一半。红外发光二极管的方向应使安装
凸耳朝上。
![f380a66539ba2b718f2d92756edf6683.png](https://img-blog.csdnimg.cn/img_convert/f380a66539ba2b718f2d92756edf6683.png)
焊接JST电缆
一根2线JST母电缆焊接到红外接收器的接线上。再次检查极性是否与连接到黑色导线的接地和连接到红色导线的电压相匹配。用热缩管将裸露的电线绝缘。
![08e43b03476daf80ab5f1ff151a56a9c.png](https://img-blog.csdnimg.cn/img_convert/08e43b03476daf80ab5f1ff151a56a9c.png)
焊接JST电缆
箍现在已经安装了红外接收器并接上了电线。
![f380a66539ba2b718f2d92756edf6683.png](https://img-blog.csdnimg.cn/img_convert/f380a66539ba2b718f2d92756edf6683.png)
安全固定红外发射器
红外发射器安装在箍的另一端靠近安装片的位置。将红外线发射器放入中间的凹槽中。固定M2.5 x 10mm长的螺丝时,固定到位。
![07f17f8d5cc9e600396537ef28bc3029.png](https://img-blog.csdnimg.cn/img_convert/07f17f8d5cc9e600396537ef28bc3029.png)
Feather控制主板线路连接
矩阵显示屏电源线制作
64x32的RGB矩阵显示器有一根电源线。布线已经缩短和简化,使布线在装配期间更易于管理。
![06c220b09664768a1da50fd8a950f86a.png](https://img-blog.csdnimg.cn/img_convert/06c220b09664768a1da50fd8a950f86a.png)
Feather 主控板和 FeatherWing扩展板配置
羽毛M4 Express有一个12针和16针带焊针的公头焊接到PCB板的底部。RGB矩阵显示扩展板有12针和16针母座焊接到PCB的顶部。2x10母插座焊接是在扩展板的底部。
![5c7c3d471051527fbb017b50a9638459.png](https://img-blog.csdnimg.cn/img_convert/5c7c3d471051527fbb017b50a9638459.png)
JST连接电缆
根JST电缆被用来连接到Feather 主板和FeatherWing扩展板及相关的各种部件。这里有一个电缆列表以及它们连接的关系。
![34ee8131f5516218896537f4c4af69ec.png](https://img-blog.csdnimg.cn/img_convert/34ee8131f5516218896537f4c4af69ec.png)
- 2-线JST公头: 拱廊按钮
- 3-线JST公头: STEMMA 扬声器
- 3-线JST公头: 红外发射器
- 2-线 JST公头: 红外接收器
Feather 主控板和 FeatherWing连接关系
![f5f7aac80e137af3ab0cb67cceeeb863.png](https://img-blog.csdnimg.cn/img_convert/f5f7aac80e137af3ab0cb67cceeeb863.png)
仔细检查导线和电缆是否准备好焊接到pcb板上。
焊接电缆-红外阻断接收器
开始焊接2线JST电缆到Feather主控板的地和3V引脚。这条电缆将连接到红外接收器上。电线焊接在Feather的底部。
![9c9dd980e60b3c97f939ee0fe5d44ed3.png](https://img-blog.csdnimg.cn/img_convert/9c9dd980e60b3c97f939ee0fe5d44ed3.png)
焊接电缆到红外阻断TX脚
焊接3线JST电缆到Feather主控板上可用的地和3V引脚。这条电缆将连接到红外发射机上。白线将连接到RGB矩阵显示器扩展板的A1引脚。
![9c9dd980e60b3c97f939ee0fe5d44ed3.png](https://img-blog.csdnimg.cn/img_convert/9c9dd980e60b3c97f939ee0fe5d44ed3.png)
FeatherWing连接
其余的JST电缆将焊接到RGB矩阵显示器扩展板。
按钮连接
焊接第二根2线JST电缆到GND和FeatherWing扩展板底部的D4针。请参考Feather 上的引脚以确保这个引脚是正确的。
焊接红外发射器信号线
焊接3线JST电缆的白色线从到FeatherWing板底部A1针。这条电缆将用来连接IR发射器。
连接STEMMA 扬声器
焊接三线JST电缆的第二、三根线到FeatherWing板上的相连引脚。白线焊接到A0,黑线焊接到地,红线焊接到3V。
连接Feather 主控板和FeatherWing扩展板
布线是完成后,准备好插入各种组件。
连线检查
仔细检查接线是否正确。
LED矩阵屏组装
安装包角支架
角支架被固定在RGB矩阵显示器的四个角上。这些托架固定在安装孔上。它们还能包住一块黑色的LED亚克力散光片。
![4701c78d3b857467587abf9a7c341f48.png](https://img-blog.csdnimg.cn/img_convert/4701c78d3b857467587abf9a7c341f48.png)
插入六角螺帽
抓住四个角托架中的两个,将M3六角螺母插入凹槽。两个角支架用于确保按钮安装到显示器的一侧。你可自己选择把按钮安装在哪一边。
![daddc80ff183846c1b0fa18e5267db60.png](https://img-blog.csdnimg.cn/img_convert/daddc80ff183846c1b0fa18e5267db60.png)
组装包角托架
把托架放在角落上,并调整他们,使安装孔是正确排列。显示器侧面有支架,支架上有明显的安装孔。这些孔用于固定按钮安装板。
![d7949c00bc188fd7897335a0994d529a.png](https://img-blog.csdnimg.cn/img_convert/d7949c00bc188fd7897335a0994d529a.png)
可选:将黑色LED亚克力片滑动插包角托架内。
安装支脚
将脚放在角架上,并将安装孔对齐。为了保证正确的位置,请参考照片。
![4342017014e1ac2aae008dbf53ceb0ab.png](https://img-blog.csdnimg.cn/img_convert/4342017014e1ac2aae008dbf53ceb0ab.png)
固定支脚
使用两颗M3 x 10mm长的螺丝将脚固定在角支架上。这些螺丝也会紧固在显示器上的螺纹插入件上。
![878ed9bbeccb28c27b56422786d8e37d.png](https://img-blog.csdnimg.cn/img_convert/878ed9bbeccb28c27b56422786d8e37d.png)
安装另一个脚
第二脚重复上面这个过程。
![d6d62fe6c0b1bac5ab6fb93e6ba0a93d.png](https://img-blog.csdnimg.cn/img_convert/d6d62fe6c0b1bac5ab6fb93e6ba0a93d.png)
按钮连接
短的2线JST电缆焊接在拱廊按钮上。这连接到JST电缆,这条电缆焊接到FeatherWing扩展板上的D4引脚。
![1d6a003aadcd9c9a2422dfd6c41b0bb5.png](https://img-blog.csdnimg.cn/img_convert/1d6a003aadcd9c9a2422dfd6c41b0bb5.png)
组装按钮安装板
将按钮安装板与前面安装的六角螺母一起放在角架上。并对准安装孔。
![98b25a519c95a6e1dd27fd54f129e5b4.png](https://img-blog.csdnimg.cn/img_convert/98b25a519c95a6e1dd27fd54f129e5b4.png)
固定按钮安装板
通过安装孔插入并紧固两个M3 x 6mm长的机器螺钉。参考照片以获得最佳位置。
![4680bf862519ec0a0c48f16bdb705797.png](https://img-blog.csdnimg.cn/img_convert/4680bf862519ec0a0c48f16bdb705797.png)
面板安装拱廊按钮
将拱廊按钮插入按钮安装板。确保按钮面向正确的方向。
![cd6a0225b2bcbca82df3896fce36aeb9.png](https://img-blog.csdnimg.cn/img_convert/cd6a0225b2bcbca82df3896fce36aeb9.png)
固定拱廊按钮
使用螺母将拱廊按钮固定在按钮安装板上。
![827980aab2bdf380e69b6ca7d8a7b61e.png](https://img-blog.csdnimg.cn/img_convert/827980aab2bdf380e69b6ca7d8a7b61e.png)
安装篮圈支架到脚上
把两个篮圈支架放在脚上。排列好安装孔。请参考照片的正确位置和方向。
![b9d3cbae208c6b1e3090d8eb993206f5.png](https://img-blog.csdnimg.cn/img_convert/b9d3cbae208c6b1e3090d8eb993206f5.png)
固定篮圈支架
将一个M3 x 10mm长的螺钉插入并固定在环箍支架上的安装孔中。
![8dc45d22165c3a64f4cd984a269d113f.png](https://img-blog.csdnimg.cn/img_convert/8dc45d22165c3a64f4cd984a269d113f.png)
固定支架
使用M3六角螺母固定螺钉。将M3六角螺母插入脚后部的凹槽中。
![db33408f70fe27b3ebd0c4dfb02527a4.png](https://img-blog.csdnimg.cn/img_convert/db33408f70fe27b3ebd0c4dfb02527a4.png)
另一个篮圈支架
对另一只脚安装重复上面这个过程。
![32d6c5024d27ef408778420e4fe69362.png](https://img-blog.csdnimg.cn/img_convert/32d6c5024d27ef408778420e4fe69362.png)
安装篮圈
将环箍上的安装凸耳放入支脚上的两个支架中。支架具有壁,用于压装安装凸耳。安装孔应正确对齐。
![b8e45e2f01f328a37df8cd78d136ffb4.png](https://img-blog.csdnimg.cn/img_convert/b8e45e2f01f328a37df8cd78d136ffb4.png)
固定篮圈
拧紧M3 x 10mm的长螺丝。
![b7db869db0067344d16d804cc9b21d8f.png](https://img-blog.csdnimg.cn/img_convert/b7db869db0067344d16d804cc9b21d8f.png)
已经固定的篮圈
环箍上的安装凸耳具有用于安装M3六角螺母的凹槽。插入六角螺母以固定M3螺钉。
![c4db8de11f66c32901c62e8c1abd5f83.png](https://img-blog.csdnimg.cn/img_convert/c4db8de11f66c32901c62e8c1abd5f83.png)
准备安装Feather 和FeatherWing电路板
准备好印刷电路板,以适应RGB矩阵显示器的背面。
![595ccefcb25e4b977e0ab92ee72c70ca.png](https://img-blog.csdnimg.cn/img_convert/595ccefcb25e4b977e0ab92ee72c70ca.png)
安装Feather 和FeatherWing电路板
Feather M4 express安装在RGB矩阵FeatherWing扩展板的上面。FeatherWing 板压装在显示屏上的2x8 IDC头上。确保它放置在正确的插座上。使用箭头参考输入插座。
![6cf2a0dbc5678bcc971a7c699b008da3.png](https://img-blog.csdnimg.cn/img_convert/6cf2a0dbc5678bcc971a7c699b008da3.png)
STEMMA 扬声器
Stemma扬声器使用4x M2.5 x 10mm长的机器螺丝固定在扬声器底座上。
![5f2898f3146208a89bf38321235edd0f.png](https://img-blog.csdnimg.cn/img_convert/5f2898f3146208a89bf38321235edd0f.png)
安装STEMMA 扬声器
将Stemma扬声器放在扬声器支架上的内置支架上。插入M2.5螺钉并使用六角螺母将PCB固定到底座上。
![bc4bb9717cd1425006c29466f90d2c26.png](https://img-blog.csdnimg.cn/img_convert/bc4bb9717cd1425006c29466f90d2c26.png)
固定扬声器支架
将扬声器支架放在显示屏背面中间的安装孔上。对准安装孔并插入两个M3 x 6mm长的螺钉,以将扬声器安装到显示屏上。参考照片以获得最佳方向。
![1544465e78fc2c75c45a336088b5e34d.png](https://img-blog.csdnimg.cn/img_convert/1544465e78fc2c75c45a336088b5e34d.png)
插入连接器
小心地将JST电缆插入各自对应部分进行连接。采取措施确保连接正确。
![de6531a947ab8959a5d59b6cf879bf37.png](https://img-blog.csdnimg.cn/img_convert/de6531a947ab8959a5d59b6cf879bf37.png)
大功告成
现在我们已经把它完全组产完毕了,它已经准备好进行测试。我们建议使用安装钉将脚暂时固定在桌面或工作表面。脚具有各种安装孔,可通过硬件螺丝固定在框架或桌面上。
! 在游戏过程中要小心谨慎。你是在往显示器上扔球!