pildio 发表于 2024-9-1 15:36

【Follow me第二季第1期】任务汇总!

本帖最后由 pildio 于 2024-10-18 13:53 编辑

<h1 title="【Follow me第二季第1期】+开发环境的搭建">【Follow me第二季第1期】+开发环境的搭建&nbsp;<a href="https://bbs.eeworld.com.cn/thread-1289010-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1289010-1-1.html</a></h1>

<p>&nbsp;</p>

<p>大家好,我是pildio,今天向大家分享一下我参与Follow me第一期的任务汇总<br />
项目简介:搭配必购板子Adafruit Circuit Playground Express完成下方任务。</p>

<p>&nbsp;</p>

<p>首先是全部的物料清单</p>

<p><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/08/225443jc6o79h7o49f7v07.jpg" /></p>

<p>&nbsp;</p>

<ul>
        <li><b>开发环境的搭建</b></li>
</ul>

<p>本文提供基于Arduino IDE的开发环境搭建 如果CircuitPython请看我下一篇文章</p>

<hr />
<h2><b>1、</b><b>设置 Arduino IDE</b></h2>

<p><u>参考文献:</u><a href="https://learn.adafruit.com/adafruit-circuit-playground-express/set-up-arduino-ide" target="_blank"><u>https://learn.adafruit.com/adafruit-circuit-playground-express/set-up-arduino-ide</u></a></p>

<p>安装 SAMD 支持 &nbsp;&nbsp;通过导航到 Tools-&gt;Board 菜单打开 Boards Manager</p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p align="justify">进入搜索界面后输入Arduino SAMD &nbsp;&nbsp;<b>确保Arduino SAMD 版本为1.6.16 或更高</b></p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>退出并重新打开 Arduino IDE,以确保所有板都已正确安装。现在应该能够选择并上传到 Tools-&gt;Board 菜单中列出的新板。</p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<hr />
<p align="center">&nbsp;</p>

<ol start="2">
        <li><b>安装驱动程序</b></li>
</ol>

<p><u>参考文献:</u><a href="https://learn.adafruit.com/adafruit-circuit-playground-express/adafruit2-windows-driver-installation" target="_blank"><u>https://learn.adafruit.com/adafruit-circuit-playground-express/adafruit2-windows-driver-installation</u></a></p>

<p align="justify">下载正确的驱动程序 下载地址如下:也可以看我本文附件内容</p>

<p align="justify"><a href="https://github.com/adafruit/Adafruit_Windows_Drivers/releases/latest" target="_blank"><u>https://github.com/adafruit/Adafruit_Windows_Drivers/releases/latest</u></a></p>

<p align="justify">&nbsp;</p>

<p align="justify">如果您是windows10和 Windows 11 只需要则根本不需要运行安装程序</p>

<hr />
<p align="justify">&nbsp;</p>

<ol start="3">
        <li><b>插入硬件让电脑读取</b></li>
</ol>

<p align="justify">插入 Circuit Playground Express 并等待它作系统识别(只需几秒钟)。它将创建一个串行/COM 端口,您现在可以从下拉列表中选择它,它甚至会被&ldquo;指示&rdquo;为 Circuit Playground Express 板&nbsp;&nbsp;正确选择串口号即可连接成功</p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<hr />
<p align="center">&nbsp;</p>

<ol start="4">
        <li><b>成功上传</b></li>
</ol>

<p align="justify">将示例程序上传并下载会得到一堆红色文本,告诉你设备已被找到,并且已经编程、验证和重置</p>

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3349344">
                        <h1 title="【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython">【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython&nbsp;</h1>

                        <h1 title="【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython"><a href="https://bbs.eeworld.com.cn/thread-1289017-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1289017-1-1.html</a></h1>
                        &nbsp;

                        <p><b>二、开发环境的搭建</b><b>(基于CircuitPython)</b></p>

                        <ol>
                                <li align="justify">安装或更新CircuitPython</li>
                        </ol>

                        <p align="justify">单击上面的链接并下载最新的 UF2 文件这里选择中文拼音</p>

                        <p align="justify"><a href="https://circuitpython.org/board/circuitplayground_express/" target="_blank"><u>Circuit Playground Express Download (circuitpython.org)</u></a></p>

                        <p align="center"></p>
                        &nbsp;

                        <p>&nbsp;</p>

                        <p>或者您可以在本文的末尾找到该文件 但是请注意版本如果需要更新版本 请随时去上述地址下载</p>

                        <hr />
                        <ol start="2">
                                <li align="justify">使用一根具有数据传输功能的&nbsp;USB 电缆将 Circuit Playground Express 插入电脑后 双击Circuit Playground Express中间的小重置按钮,您将看到所有 LED 都变为绿色。如果它们全部变为红色,请检查 USB 电缆,尝试另一个 USB 端口等。如果双击不起作用,请尝试单击一次!</li>
                                <li align="justify">您将看到一个名为 CPLAYBOOT的新磁盘驱动器出现 拖动刚才下载的文件到它上面</li>
                        </ol>

                        <p align="center"></p>
                        &nbsp;

                        <p>&nbsp;</p>

                        <hr />
                        <p>4、CPLAYBOOT驱动器将消失,并出现一个名为CIRCUITPY的新磁盘驱动器</p>

                        <p align="center"></p>

                        <p>&nbsp;</p>

                        <hr />
                        <p align="center">&nbsp;</p>

                        <p>5、安装vscode</p>

                        <p>我选用的开发工具为vscode+Circuitpython插件实现对开发板进行编程</p>

                        <p>在vscode界面点击 扩展 安装如下插件</p>

                        <p align="center"></p>
                        &nbsp;

                        <p>&nbsp;</p>

                        <p>然后将开发板连接到电脑上用vscode打开开发板u盘文件夹即可</p>

                        <p>&nbsp;</p>

                        <p>在code.py文件即是本次开发板您需要编写的代码</p>

                        <p>&nbsp;</p>

                        <p>这里提供一个测试代码</p>

                        <p><a onclick="copycode($(&quot;code_0&quot;));">复制</a></p>

                        <pre id="code_0">
&nbsp;</pre>
                        <code class="hljs">import board</code><code class="hljs">import digitalio</code><code class="hljs">import time</code><code class="hljs">led = digitalio.DigitalInOut(board.LED</code>

                        <p>&nbsp;</p>
                        <code class="hljs">led.direction = digitalio.Direction.OUTPU</code>

                        <p>&nbsp;</p>
                        <code class="hljs">while True</code>

                        <p>&nbsp;</p>
                        <code class="hljs">led.value = Tru</code><code class="hljs">time.sleep(0.1</code><code class="hljs">led.value = Fals</code><code class="hljs">time.sleep(0.5) </code>

                        <p>若您成功安装LED 将会亮起和熄灭</p>
                        </td>
                </tr>
        </tbody>
</table>

<p align="center"></p>

<h1 title="【Follow me第二季第1期】 开发过程用到的库与支持包">【Follow me第二季第1期】 开发过程用到的库与支持包 <a href="https://bbs.eeworld.com.cn/thread-1290533-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1290533-1-1.html</a></h1>

<p>&nbsp;</p>

<h1><b>三、如何确定</b><b>CircuitPython</b><b>需要的库文件</b></h1>

<p>1、我们在使用CircuitPython时需要用到库文件 这些库文件在这里下载<a href="https://circuitpython.org/libraries" target="_blank">https://circuitpython.org/libraries</a>或者您可以从我的附件中获取&nbsp;<img alt="" border="0" src="https://bbs.eeworld.com.cn/static/image/filetype/zip.gif" />&nbsp;<a href="https://bbs.eeworld.com.cn/forum.php?mod=attachment&amp;aid=ODI3OTU0fDk5Y2Q2ZDk1fDE3MjUxNzQ0NzZ8MTQyOTc0NHwxMjkwNTMz" target="_blank">adafruit-circuitpython-bundle-9.x-mpy-20240728.zip</a>&nbsp;<em>(14.85 MB, 下载次数: 0)</em></p>

<p><img alt="" border="0" src="https://bbs.eeworld.com.cn/static/image/filetype/zip.gif" />&nbsp;<a href="https://bbs.eeworld.com.cn/forum.php?mod=attachment&amp;aid=ODI3OTUzfDU5NjBjYjE3fDE3MjUxNzQ0NzZ8MTQyOTc0NHwxMjkwNTMz" target="_blank">adafruit-circuitpython-bundle-8.x-mpy-20240728.zip</a>&nbsp;<em>(14.84 MB, 下载次数: 0)</em></p>

<p>&nbsp;</p>

<hr />
<p>2、现在打开 lib 文件夹。当您打开该文件夹时,您会看到大量的 .MPY 文件和文件夹。</p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<hr />
<p align="justify">3、如何导入我需要的库 首先打开 CIRCUITPY 驱动器上的 lib 文件夹。然后,打开从下载的 zip 中提取的 lib 文件夹。在里面,你会发现许多文件夹和.mpy文件。找到您要使用的库,并将其复制到 CIRCUITPY 上的 lib 文件夹中。</p>

<p align="justify">如果库是一个包含多个 .mpy 文件的目录,请确保将整个文件夹复制到 CIRCUITPY/lib。</p>

<hr />
<p align="justify">4、我们需要安装那些库 &nbsp;一般来说我们需要导入代码中import 后面的名称</p>

<p align="justify">例如import library_or_module 即 我们需要library_or_module这个库</p>

<hr />
<p>5、如何创建自己的 .mpy 文件</p>

<p align="justify">mpy-cross</p>

<p align="justify">请参考一下连接</p>

<p align="justify"><a href="https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/mpy-cross/" target="_blank"><u>https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/mpy-cross/</u></a></p>

<p>若要创建 .mpy 文件,请运行以在与原始文件相同的目录中创建 yourfile.mpy。./mpy-cross path/to/yourfile.py</p>

<hr />
<hr />
<h1><b>四、如何</b><b>卸载CircuitPython</b></h1>

<p align="justify">也许您尝试了 CircuitPython 并想回到 MakeCode 或 Arduino</p>

<p align="justify">备份您的代码在替换 CircuitPython 之前,不要忘记备份 CIRCUITPY 驱动器上的代码。这意味着您的 code.py 任何其他文件、lib 文件夹等</p>

<p align="justify">&nbsp;</p>

<p>迁移到Arduino</p>

<p align="justify">如果你想改用Arduino,你只需使用Arduino IDE来加载Arduino程序。首先插入您的电路板,然后双击重置,直到您获得绿色的板载 LED。在Arduino IDE中,选择匹配的板,例如Circuit Playground Express。确保 LED 仍为绿色,然后单击 Upload 以上传 Blink。成功上传后,串行端口将更改,因此请重新选择新端口!</p>

<p align="justify">上传 Blink 后,您应该不再需要双击以进入引导加载程序模式。当您上传时,Arduino将自动重置。</p>

<hr />
<hr />
<p><b>五、CircuitPython中本次历程我们用到的库</b></p>

<p>以上为在本次活动中我锁使用到的全部库文件这些库文件将会依这种形式进行调用</p>

<p>from adafruit_circuitplayground import cp</p>

<p align="center"></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p align="justify">adafruit_ble</p>

<p align="justify">adafruit_bluefruit_connect</p>

<p align="justify">adafruit_bus_device</p>

<p align="justify">adafruit_circuitplayground</p>

<p align="justify">adafruit_gizmo</p>

<p align="justify">adafruit_hid</p>

<p align="justify">adafruit_lis3dh.mpy</p>

<p align="justify">adafruit_thermistor.mpy</p>

<p align="justify">neopixel.mpy</p>

<p align="justify">&nbsp;</p>

<p>你可以在我所提供的压缩包中找到这些文件</p>

<p>如果想依源码格式请使用 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认格式请使用</p>

<p align="center"></p>

<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>

<p>&nbsp;</p>

<p>这里我在提供一份我使用到的lib整合包 &nbsp;见附件</p>

<hr />
<hr />
<p><b>六、上诉库文件用途</b></p>

<p align="justify">adafruit_ble&nbsp;&nbsp;&nbsp;蓝牙模块</p>

<p align="justify">adafruit_bluefruit_connect&nbsp;&nbsp;蓝牙连接手机模块</p>

<p align="justify">adafruit_bus_device&nbsp;&nbsp;外部总线访问模块管理i2c与spi总线</p>

<p align="justify">adafruit_circuitplayground&nbsp;&nbsp;本次板子的专属包</p>

<p align="justify">adafruit_gizmo&nbsp;&nbsp;&nbsp;本次板子的tft显示模块</p>

<p align="justify">adafruit_hid&nbsp;&nbsp;&nbsp;驱动程序模拟 USB HID 设备</p>

<p align="justify">adafruit_lis3dh.mpy&nbsp;&nbsp;加速度传感器lis3dh的库文件</p>

<p align="justify">adafruit_thermistor.mpy&nbsp;&nbsp;ntc热敏温度电阻的库文件</p>

<p align="justify">neopixel.mpy&nbsp;&nbsp;条带灯的库文件</p>

<p align="justify">USB接口处的一个红色LED标为D13&nbsp;</p>

<p align="justify">代码如下</p>

<pre>
<code>import array
import math
import audiobusio
import board
import neopixel
import pwmio
import time
from adafruit_circuitplayground import cp

while 1:
        cp.red_led = 1
</code></pre>

<p>任务完成 我们还可以尝试下控制灯的闪烁可以用到 time.sleep(1)这个方法来实现</p>

<p align="justify">这里辅一张完成图片</p>

<p align="justify"></p>

<p align="justify"><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/14/141443eh48d4zu8b8u814u.png" /></p>

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3352991">
                        <h1 title="【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色...">【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色...&nbsp;<a data-subject="【Follow me第二季第1期】基础任务一(必做):控制板载炫彩LED,跑马灯点亮和颜色..." data-url="https://bbs.eeworld.com.cn/thread-1290538-1-1.html" href="javascript:;" id="copy_url">[复制链接]</a></h1>
                        &nbsp;

                        <p align="justify">板载的炫彩LED是WS2812的rgb灯珠在其中我们可以通过调用neopixel库</p>

                        <p align="justify">来实现这个目标可以参考这个官方网站<a href="https://docs.circuitpython.org/projects/neopixel/en/latest/index.html" target="_blank"><u>Adafruit CircuitPython NeoPixel &mdash; Adafruit CircuitPython NeoPixel Library 1.0 documentation</u></a></p>

                        <p align="justify">&nbsp;</p>

                        <p align="justify">我们首先需要对灯珠进行初始化</p>

                        <p align="justify">&nbsp;</p>

                        <p align="justify">初始化函数定义如下</p>

                        <p align="justify">&nbsp;</p>

                        <p align="justify">classneopixel.NeoPixel(pin: Pin, n: int, *, bpp: int = 3, brightness: float = 1.0, auto_write: bool = True, pixel_order: str = None)&para;</p>

                        <p align="justify">A sequence of neopixels.</p>

                        <p align="justify">&nbsp;</p>

                        <p align="justify">Parameters:</p>

                        <p align="justify">pin (Pin) &ndash; The pin to output neopixel data on.</p>

                        <p align="justify">n (int) &ndash; The number of neopixels in the chain</p>

                        <p align="justify">bpp (int) &ndash; Bytes per pixel. 3 for RGB and 4 for RGBW pixels.</p>

                        <p align="justify">brightness (float) &ndash; Brightness of the pixels between 0.0 and 1.0 where 1.0 is full brightness</p>

                        <p align="justify">auto_write (bool) &ndash; True if the neopixels should immediately change when set. If False, show must be called explicitly.</p>

                        <p align="justify">pixel_order (str) &ndash; Set the pixel color channel order. GRBW is set by default.</p>

                        <p align="justify">但经过查阅资料了解到python已经封装好了无需自己写驱动直接调用即可这里附上详细代码</p>

                        <pre>
<code>import time# 导入时间模块
from adafruit_circuitplayground import cp

# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
    "black": (0, 0, 0),          # 黑色
    "white": (255, 255, 255),    # 白色
    "green": (0, 255, 0),      # 绿色
    "red": (255, 0, 0),          # 红色
    "blue": (0, 0, 255),         # 蓝色
    "cyan": (0, 255, 255),       # 青色
    "magenta": (228, 0, 127),    # 品红色
    "yellow": (255, 150, 0),   # 黄色
}
a = 0
cp.detect_taps = 1
cp.pixels.brightness = 0.05
# 设置像素的亮度为0.05
pixel_count = 10# 定义像素数量为10

def scale_range(value):

    return round(value / 320 * 9)

# 定义一个颜色轮函数,根据输入位置返回对应颜色的RGB值
def color_wheel(position):
    # 如果位置不在0到255范围内,返回黑色
    if (position &lt; 0) or (position &gt; 255):
      return color_mapping["black"]
   
    # 根据位置计算颜色值并返回RGB元组
    if position &lt; 85:
      return (int(255 - position * 3), int(position * 3), 0)# 红-绿渐变
    elif position &lt; 170:
      position -= 85
      return (0, int(255 - (position * 3)), int(position * 3))# 绿-青渐变
    else:
      position -= 170
    return (int(position * 3), 0, int(255 - position * 3))# 青-蓝渐变

current_pixel = 0# 初始化当前像素为0

# 无限循环,用于不断更新LED灯
while True:

    #检查敲击状态
    if cp.tapped:
      cp.red_led = 1
      print("Tapped!")
      a=a+0.01


   # 检查开关状态
    if cp.switch:
      current_pixel += 1# 开关开启,当前像素增加1
      if current_pixel &gt; pixel_count - 1:# 如果当前像素超出范围,重置为0
            current_pixel = 0
    else:
      current_pixel -= 1# 开关关闭,当前像素减少1
      if current_pixel &lt; 0:# 如果当前像素小于0,重置为最大值
            current_pixel = pixel_count - 1
   
    if cp.button_b:
      print("lingh+!")
      cp.pixels.brightness = cp.pixels.brightness +0.01
    if cp.button_a:
      cp.pixels.brightness = cp.pixels.brightness -0.01
      print("lingh-!")

   
    time.sleep(a)
    cp.red_led = 0
    print(cp.light)
    for index in range(pixel_count):# 遍历每个像素
      # 计算当前像素的虹彩颜色
      rainbow_color = color_wheel(255 // pixel_count * ((current_pixel + index) % pixel_count))
      
      # 设置当前像素的颜色,使用tuple生成RGB值
      cp.pixels = tuple(
            int(c * ((pixel_count - (current_pixel + index) % pixel_count)) / pixel_count) for c in rainbow_color
      )
      

</code></pre>

                        <p align="justify">如视频中展示按下a按键增加亮度 按下b按键减小亮度中间拨码开关可以控制RGB轮换方向,敲击板子使能加速度传感器会让旋转速度变慢</p>

                        <p align="justify"><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/14/150958l6hh6xp9sh6s1fxj.png" /></p>
                        </td>
                </tr>
        </tbody>
</table>

<p>&nbsp;</p>

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3353012">
                        <h1 title="Follow me第二季第1期基础任务二(必做)监测环境温度和光线,通过板载LED展示舒...">Follow me第二季第1期基础任务二(必做)监测环境温度和光线,通过板载LED展示舒...&nbsp;<a data-subject="Follow me第二季第1期基础任务二(必做)监测环境温度和光线,通过板载LED展示舒..." data-url="https://bbs.eeworld.com.cn/thread-1290543-1-1.html" href="javascript:;" id="copy_url">[复制链接]</a></h1>
                        &nbsp;

                        <p align="justify">&nbsp;</p>

                        <p align="justify">需要获取的数据有两个环境温度和光线,MMBT2222 &nbsp;ALSPT1931这里我定义的是光照越强亮起的灯就越多&nbsp;因为在当地环境温度变化难度高于环境光线变化 本质上都是一个东西</p>

                        <p align="justify">环境温度我将会通过串口进行打印 light输出是l0-320</p>

                        <p align="justify">代码如下</p>

                        <pre>
<code>from adafruit_circuitplayground import cp
import time
# 定义颜色映射字典,将颜色名称映射到RGB元组
color_mapping = {
    "black": (0, 0, 0),          # 黑色
    "white": (255, 255, 255),    # 白色
    "green": (0, 255, 0),      # 绿色
    "red": (255, 0, 0),          # 红色
    "blue": (0, 0, 255),         # 蓝色
    "cyan": (0, 255, 255),       # 青色
    "magenta": (228, 0, 127),    # 品红色
    "yellow": (255, 150, 0),   # 黄色
}
# 基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度

pixel_count = 10# 定义像素数量为10
current_pixel = 0# 初始化当前像素为0
cp.pixels.brightness = 0.05 # 灯珠亮度为0.05
      


while True:
    temperature_value = cp.temperature
    light_value = cp.light
    print( "Temperature: %0.1f *C; Light Level: %d;"% (temperature_value, light_value))
    case_val=light_value/10
   
    for i in range(5):
      if i &lt;= light_value:
            cp.pixels = (0, 128, 128)
      else:
            cp.pixels = (0, 0, 0)

   
    for i in range(9,4,-1): #循环变量从9递减到5
      if i &gt;= 10 - temperature_value:
            cp.pixels = (0, 128, 128)
      else:
            cp.pixels = (0, 0, 0)
   
   
    cp.pixels.show()    #pixels显示使能
   
</code></pre>

                        <p align="justify">效果图如下</p>

                        <p align="justify"></p>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

                        <p>&nbsp;</p>

                        <p align="justify"><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/14/151005uik0kkp0cklbi33p.png" /></p>
                        </td>
                </tr>
        </tbody>
</table>

<p>&nbsp;</p>

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3354502">
                        <h1 title="Follow me第二季第1期二基础任务三(必做):接近检测">Follow me第二季第1期二基础任务三(必做):接近检测&nbsp;<a data-subject="Follow me第二季第1期二基础任务三(必做):接近检测" data-url="https://bbs.eeworld.com.cn/thread-1291183-1-1.html" href="javascript:;" id="copy_url">[复制链接]</a></h1>
                        &nbsp;

                        <p>这里我们使用到了板载的两颗<strong>红外LED&nbsp;</strong>一个发射一个接受去判断设定阈值需要注意的是红外发光管应采用闪烁方式发光,避免过热烧毁</p>

                        <p>代码如下</p>

                        <div></div>
                        &nbsp;<img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/21/163946qvm46n6uk6wfwlui.png" />
                        <p>&nbsp;</p>

                        <p><strong>展示</strong></p>

                        <p>由于图片无法展示靠近过程请参考展示视频</p>
                        </td>
                </tr>
        </tbody>
</table>

<h1 title="【Follow me第二季第1期】制作不倒翁——展示不倒翁运动过程中的不同灯光效果">【Follow me第二季第1期】制作不倒翁&mdash;&mdash;展示不倒翁运动过程中的不同灯光效果&nbsp;<a data-subject="【Follow me第二季第1期】制作不倒翁——展示不倒翁运动过程中的不同灯光效果" data-url="https://bbs.eeworld.com.cn/thread-1291185-1-1.html" href="javascript:;" id="copy_url">[复制链接]</a></h1>

<p>&nbsp;</p>

<p>这个任务中我们需要利用加速度传感器读取到xyz三方面的加速度 然后给出对应的灯光效果。我实现的是根据板子的倾斜方向亮起对应的灯 我还没太学习过加速度传感器的应用 这里参考了大佬的代码</p>

<p>如下</p>

<p>&nbsp;</p>

<pre>
<code>import math
from adafruit_circuitplayground import cp

# 如果需要改变颜色,请在这个字典中修改颜色值
colors = {
    "black": (0, 0, 0)
}

# 定义一个颜色轮函数
def color_wheel(position):
    if position &lt; 0 or position &gt; 255:
      return (0, 0, 0)
    if position &lt; 85:
      return (int(position * 3), int(255 - position * 3), 0)
    if position &lt; 170:
      position -= 85
      return (int(255 - position * 3), 0, int(position * 3))
    position -= 170
    return (0, int(position * 3), int(255 - position * 3))

while True:
    accel_x, accel_y, accel_z = cp.acceleration
    inclination = (2 - (math.atan2(accel_x, accel_y) / math.pi + 1)) * 180
    force = math.sqrt((accel_x * accel_x) + (accel_y * accel_y))
    print(
      "Accelerometer: (%0.1f, %0.1f, %0.1f) m/s^2; Angle: %0.1f, Magnitude: %0.1f"
      % (accel_x, accel_y, accel_z, inclination, force)
    )
    if force &gt; 2:
      force = min(force, 9.8)
      for pos in range(10):
            if pos == (inclination * 10 // 360):
                cp.pixels = tuple(
                  int(comp * ((10 - pos % 10)) / 10.0) for comp in color_wheel(25 * (pos % 10))
                )
            else:
                cp.pixels = colors["black"]
</code></pre>

<div></div>

<p><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202408/21/165057l5oj7k7uiwt6r5ms.jpeg" /></p>

<p>&nbsp;</p>

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3355586">
                        <h1 title="【Follow me第二季第1期】-水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果">【Follow me第二季第1期】-水果钢琴&mdash;&mdash;通过触摸水果弹奏音乐,并配合灯光效果&nbsp;<a data-subject="【Follow me第二季第1期】-水果钢琴——通过触摸水果弹奏音乐,并配合灯光效果" data-url="https://bbs.eeworld.com.cn/thread-1291589-1-1.html" href="javascript:;" id="copy_url">[复制链接]</a></h1>
                        &nbsp;

                        <p>水果钢琴</p>

                        <p>代码如下</p>

                        <pre>
<code>while 1:

    if cp.touch_A1:
      cp.pixels.fill((256, 0, 0))
      cp.start_tone(262)
    elif cp.touch_A2:
      cp.pixels.fill((256, 128, 0))
      cp.start_tone(294)
    elif cp.touch_A3:
      cp.pixels.fill((256, 256, 128))
      cp.start_tone(330)
    elif cp.touch_A4:
      cp.pixels.fill((128, 256, 256))
      cp.start_tone(349)
    elif cp.touch_A5:
      cp.pixels.fill((0, 128, 256))
      cp.start_tone(392)
    elif cp.touch_A6:
      cp.pixels.fill((0, 0, 256))
      cp.start_tone(440)
    elif cp.touch_A7:
      cp.pixels.fill((256, 256, 256))
      cp.start_tone(494)
    elif cp.touch_A8:
      cp.pixels.fill((0, 0, 0))
      cp.start_tone(523)
    else:
      cp.pixels.fill((0, 0, 0))
      cp.stop_tone()
</code></pre>

                        <p>只需要通过判断引脚电平的变化 调用touch_A1&mdash;touch_A8引脚,即可判断出哪里的电极被触发对应调用pixels与start_tone方法即可响起声音跟灯光</p>

                        <p><strong>项目视频演示</strong></p>

                        <hr />
                        <p>本项目完成了本期活动的全部内容,所有任务的展示如下:分成两个视频一个专享项目展示</p>

                        <p>401d232ebb5284c2bc7a6e51d6d72fcfd7007edf47b79bc678f8020b3117c15a<br />
                        &nbsp;</p>

                        <p>&nbsp;</p>

                        <p>我的技术水平通过这次学习得到提升,我通过实际操作,我对这款开发板的特性和使用方法有了全面的了解,提升了我的硬件编程和调试技能。<br />
                        对我的创新思维也有启发作用。看到其他同学的创意项目,激发了我的创新思维,启发我在未来的项目中尝试更多新的想法。<br />
                        团队合作:通过与小组成员的合作,我学会了如何在团队中有效沟通和协作,这对于任何项目都是非常重要的。<br />
                        社区交流:活动中认识了很多志同道合的朋友,建立了宝贵的联系。这些交流不仅有助于技术上的成长,也为未来可能的合作打下了基础。<br />
                        总之,这次活动不仅让我学到了新的知识和技术,更重要的是激发了我对电子开发的热情。我相信这些经验和心得将对我的未来发展大有裨益。</p>

                        <p>我希望后面可以推出更多相关的活动,更高难度的工作,并且可以有相关更详尽的课程学习。</p>

                        <div>这里附上全部代码给大家参考</div>
                        </td>
                </tr>
        </tbody>
</table>

Jacktang 发表于 2024-9-2 07:46

<p>如果是迁移到Arduino,想改用Arduino,只需使用Arduino IDE来加载Arduino程序,这样做也挺方便的</p>

pildio 发表于 2024-10-13 15:44

<p><strong>对本次活动的心得体会与建议:</strong></p>

<p>参加这次电子开发板试玩活动,我收获颇丰。</p>

<p>我的技术水平通过这次学习得到提升,我通过实际操作,我对这款开发板的特性和使用方法有了全面的了解,提升了我的硬件编程和调试技能。<br />
对我的创新思维也有启发作用。看到其他同学的创意项目,激发了我的创新思维,启发我在未来的项目中尝试更多新的想法。<br />
团队合作:通过与小组成员的合作,我学会了如何在团队中有效沟通和协作,这对于任何项目都是非常重要的。<br />
社区交流:活动中认识了很多志同道合的朋友,建立了宝贵的联系。这些交流不仅有助于技术上的成长,也为未来可能的合作打下了基础。<br />
总之,这次活动不仅让我学到了新的知识和技术,更重要的是激发了我对电子开发的热情。我相信这些经验和心得将对我的未来发展大有裨益。</p>

<p>我希望后面可以推出更多相关的活动,更高难度的工作,并且可以有相关更详尽的课程学习。</p>
页: [1]
查看完整版本: 【Follow me第二季第1期】任务汇总!