差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
mp_key_led [2021/10/04 00:29] gongyusu [4. 将输入和输出放在一起] |
mp_key_led [2023/07/31 15:59] (当前版本) group003 |
||
---|---|---|---|
行 1: | 行 1: | ||
## 用按键控制LED灯 | ## 用按键控制LED灯 | ||
- | 我们开始将基本的电子元件连接到你的树莓派Pico上,并编写程序来控制和感知它们。树莓派Pico的RP2040微控制器在设计时就考虑到了物理计算,它的众多通用输入/输出(GPIO)引脚让它可以与很多元器件进行连接和通信,允许我们构建项目,从照明LED到记录关于你周围世界的数据。 | + | 我们开始将基本的电子元件连接到你的[[rpi_pico|树莓派Pico]]上,并编写程序来控制和感知它们,就像我们的大脑可以控制我们的四肢,通过感知器官获取外界的反应。树莓派Pico的[[RP2040]]微控制器在设计时就充分考虑到了对外部硬件器件的连接、感知和控制,它有许多通用输入/输出([[GPIO]])引脚来同各种元器件进行连接和通信,这样我们可以构建多种不同的项目,从最简单的点亮[[LED]]到记录关于你周围世界的数据。 |
行 10: | 行 10: | ||
|LED|所在的板卡|对应的RP2040的GPIO管脚| | |LED|所在的板卡|对应的RP2040的GPIO管脚| | ||
|蓝色LED|Pico核心板|25| | |蓝色LED|Pico核心板|25| | ||
- | |红色LED|Pico学习板|19| | + | |红色LED|Pico学习板|26| |
- | |绿色LED|Pico学习板|18| | + | |绿色LED|Pico学习板|22| |
- | |蓝色LED|Pico学习板|17| | + | |蓝色LED|Pico学习板|21| |
- | |黄色LED|Pico学习板|16| | + | |黄色LED|Pico学习板|20| |
我们可以先考虑使用Pico核心板上的LED。 | 我们可以先考虑使用Pico核心板上的LED。 | ||
行 20: | 行 20: | ||
{{ :ledonpico.png |}} <WRAP centeralign> 树莓派Pico核心板上的LED位置 </WRAP> | {{ :ledonpico.png |}} <WRAP centeralign> 树莓派Pico核心板上的LED位置 </WRAP> | ||
- | 这个LED的工作原理和其它任何LED一样: | + | 这个[[LED]]的工作原理和其它任何LED一样: |
* 通电时,它会发光 | * 通电时,它会发光 | ||
* 当它断电时,熄灭。 | * 当它断电时,熄灭。 | ||
- | 板上的这颗LED连接到RP2040的通用输入/输出引脚之一:GP25,正因为这个管脚已经用于在板上连接LED,所以在Pico核心板的板边输入输出管脚上就没有这个GP25了。虽然板上的这颗LED外,您不能将任何其它外部硬件再连接到该管脚,但它可以像你程序中的任何其它GPIO管脚一样处理,并且无需任何额外的元件就可以添加输出到程序中。 | + | 板上的这颗LED连接到RP2040的通用输入/输出引脚之一:GP25,正因为这个管脚已经用于在板上连接LED,所以在Pico核心板的板边输入输出管脚上就没有这个GP25了。虽然板上的这颗LED外,我们不能将任何其它外部硬件再连接到该管脚,但它可以像我们程序中的任何其它GPIO管脚一样处理,并且无需任何额外的元件就可以添加输出到程序中。 |
运行Thonny,配置它连接到Pico,点击进入脚本区域,然后写下下面的一行代码: | 运行Thonny,配置它连接到Pico,点击进入脚本区域,然后写下下面的一行代码: | ||
行 32: | 行 32: | ||
</code> | </code> | ||
- | 这很短的一行代码对于在Pico上使用MicroPython是非常关键的,它加载或导入被称为“库”的MicroPython代码集合,在本例中是“machine”库,这个“machine”库包含了MicroPython与Pico和其它MicroPython兼容设备通信所需的所有指令,扩展了用于物理计算的语言。如果没有这一行命令,你是无法控制Pico的任何GPIO管脚的,自然也无法使板载的LED点亮。 | + | 这很短的一行代码对于在Pico上使用MicroPython是非常关键的,它加载或导入被称为“库”的MicroPython代码集合,在本例中是“machine”库,这个“machine”库包含了MicroPython与Pico和其它MicroPython兼容设备通信所需的所有指令,扩展了用于物理计算的语言。如果没有这一行命令,我们是无法控制Pico的任何GPIO管脚的,自然也无法使板载的LED点亮。 |
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
+ | |||
**有选择地导入(import)** | **有选择地导入(import)** | ||
- | 在MicroPython和Python中都可以只导入库的一部分,而不是整个库,以节省内存,并有可能混合和匹配来自不同库的函数。在我们的示例中导入了整个库,在其它地方,你可能会看到程序中有这么写的: | + | 在MicroPython和Python中都可以只导入库的一部分,而不是整个库,以节省内存,并有可能混合和匹配来自不同库的函数。在我们的示例中导入了整个库,在其它地方,我们可能会看到程序中有这么写的: |
<code python> | <code python> | ||
from machine import Pin | from machine import Pin | ||
行 44: | 行 45: | ||
</WRAP> | </WRAP> | ||
- | “machine”库开放了所谓的应用程序编程接口(API)。这个名称听起来很复杂,但它准确地描述了它的作用: 为你的程序或应用程序提供了一种通过接口与Pico通信的方法。 | + | “machine”库开放了所谓的应用程序编程接口(API)。这个名称听起来很复杂,但它准确地描述了它的作用: 为我们的程序或应用程序提供了一种通过接口与Pico通信的方法。 |
程序的下一行就提供了一个“machine”库API的示例: | 程序的下一行就提供了一个“machine”库API的示例: | ||
行 52: | 行 53: | ||
</code> | </code> | ||
- | 这一行定义了一个名为led onboard的对象,并起了一个读起来非常容易理解的名字(比较友好),你可以在稍后的程序中使用它来引用核心板上的LED。从技术上讲,你可以使用任何名称,比如susan、gupta或fish-sandwich,但最好坚持使用描述变量目的的名字,以使程序更容易阅读和理解。 | + | 这一行定义了一个名为led onboard的对象,并起了一个读起来非常容易理解的名字(比较友好),我们可以在稍后的程序中使用它来引用核心板上的LED。从技术上讲,我们可以使用任何名称,比如susan、gupta或fish-sandwich,但最好坚持使用描述变量目的的名字,以使程序更容易阅读和理解。 |
- | 该行的第二部分调用machine库中的Pin函数。这个函数是专为处理您的Pico的GPIO引脚。目前还没有GPIO管脚(包括连接到板载LED的GP25管脚)知道它们应该做什么。第一个参数,25,是你要设置的管脚的编号; 第二个 machine.Pin.Out 是告诉Pico引脚应该用作输出而不是输入。 | + | 该行的第二部分调用machine库中的Pin函数。这个函数是专为处理我们的Pico的GPIO引脚。目前还没有GPIO管脚(包括连接到板载LED的GP25管脚)知道它们应该做什么。第一个参数,25,是我们要设置的管脚的编号; 第二个 machine.Pin.Out 是告诉Pico引脚应该用作输出而不是输入。 |
- | 这行代码只是完成了引脚的设置,但它还不能点亮LED,要点亮LED,你需要通过程序告诉Pico把管脚打开,接着输入下面的一行代码: | + | 这行代码只是完成了引脚的设置,但它还不能点亮LED,要点亮LED,我们需要通过程序告诉Pico把管脚打开,接着输入下面的一行代码: |
<code python> | <code python> | ||
行 71: | 行 72: | ||
- | 点击Thonny的“Run”按钮,将程序保存为Blink.py, 你会看到LED灯亮了起来。祝贺你!你已经编写了第一个物理计算程序! | + | 点击Thonny的“Run”按钮,将程序保存为Blink.py, 我们会看到LED灯亮了起来。祝贺你!你已经编写了第一个物理计算程序! |
- | 然而,你会注意到,LED一直亮着, 那是因为你的程序告诉Pico打开它,但从来没有告诉它关闭它。如何关闭呢?你可以在程序后面再添加一行: | + | 然而,我们会注意到,LED一直亮着, 那是因为我们的程序告诉Pico打开它,但从来没有告诉它关闭它。如何关闭呢?我们可以在程序后面再添加一行: |
<code python> | <code python> | ||
行 79: | 行 80: | ||
</code> | </code> | ||
- | 然而,这一次运行这个程序,LED似乎永远不会亮起来,这是因为Pico的工作速度非常非常快,远远快于你用肉眼看到的速度。LED亮了一下,在下一条指令就让它灭掉,亮的时间非常短暂,短暂到我们的眼睛无法看到。要解决这个问题,您需要通过引入延迟来降低程序的执行速度进而延长LED亮的时间。 | + | 然而,这一次运行这个程序,[[LED]]似乎永远不会亮起来,这是因为[[rpi_pico|Pico]]的工作速度非常非常快,远远快于我们用肉眼看到的速度。LED亮了一下,在下一条指令就让它灭掉,亮的时间非常短暂,短暂到我们的眼睛无法看到。要解决这个问题,我们需要通过引入延迟来降低程序的执行速度进而延长LED亮的时间。 |
回到程序的顶部, 在第一行的末尾单击并按回车键以插入新的第二行。在这一行输入: | 回到程序的顶部, 在第一行的末尾单击并按回车键以插入新的第二行。在这一行输入: | ||
行 87: | 行 88: | ||
</code> | </code> | ||
- | 像导入“machine”库一样,这一行将一个新库 - 'utime'库导入到MicroPython。这个库处理与时间有关的所有事情,从测量时间到在程序中插入延迟。 | + | 像导入“machine”库一样,这一行将一个新库 - 'utime'库导入到[[MicroPython]]。这个库处理与时间有关的所有事情,从测量时间到在程序中插入延迟。 |
到程序的底部,单击行led_onboard.value(1)的末尾,然后按回车以插入新行。键入: | 到程序的底部,单击行led_onboard.value(1)的末尾,然后按回车以插入新行。键入: | ||
行 94: | 行 95: | ||
</code> | </code> | ||
- | 它将调用utime库中的sleep函数,这将使程序暂停你输入的秒数 — 在本例中是5秒。 | + | 它将调用utime库中的sleep函数,这将使程序暂停我们输入的秒数 — 在本例中是5秒。 |
- | 再次单击Run按钮。这一次,你会看到Pico上的板载LED灯亮了,保持灯亮5秒钟(你可以试着数一数)然后再熄灭。 | + | 再次单击Run按钮。这一次,我们会看到Pico上的板载LED灯亮了,保持灯亮5秒钟(我们可以试着数一数)然后再熄灭。 |
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
**UTIME vs TIME** | **UTIME vs TIME** | ||
- | 如果您以前用Python编写过程序,您将习惯于使用“time”的库。utime库是为像Pico这样的微控制器设计的版本——“u”代表“μ”,希腊字母“mu”,是“micro”的缩写。如果您忘记并使用了导入时间,不要担心, MicroPython将自动使用utime库代替。 | + | 如果你以前用[[Python]]编写过程序,你将习惯于使用“time”的库。utime库是为像Pico这样的微控制器设计的版本——“u”代表“μ”,希腊字母“mu”,是“micro”的缩写。如果我们忘记并使用了导入时间,不要担心, MicroPython将自动使用utime库代替。 |
</WRAP> | </WRAP> | ||
- | 终于,我们可以让LED闪烁了。为此,您需要创建一个循环,重写你的程序如下: | + | 终于,我们可以让LED闪烁了。为此,我们需要创建一个循环,重写我们的程序如下: |
<code python> | <code python> | ||
import machine | import machine | ||
行 119: | 行 120: | ||
</code> | </code> | ||
- | 记住,循环中的行需要缩进四个空格,这样MicroPython就知道它们构成了循环。 | + | 记住,循环中的行需要缩进四个空格,这样[[MicroPython]]就知道它们构成了循环。 |
- | 再次点击“Run”图标,你会看到LED开关打开5秒、关闭5秒、再打开,不断重复在无限循环。LED将继续闪烁,直到你点击停止图标取消你的程序和重置你的Pico。 | + | 再次点击“Run”图标,我们会看到[[LED]]开关打开5秒、关闭5秒、再打开,不断重复在无限循环。LED将继续闪烁,直到我们点击停止图标取消我们的程序和重置我们的Pico。 |
还有另一种方法可以处理相同的工作:使用toggle(切换),而不是显式地将LED的输出设置为0或1。删除程序的最后四行并替换它们,使其看起来像这样: | 还有另一种方法可以处理相同的工作:使用toggle(切换),而不是显式地将LED的输出设置为0或1。删除程序的最后四行并替换它们,使其看起来像这样: | ||
行 135: | 行 136: | ||
</code> | </code> | ||
- | 再次运行程序,你会看到和之前一样的活动:板载LED会亮5秒、熄灭5秒,然后在无限循环中再次亮起来。你会发现这一次的程序短了两行:你对它进行了优化。所有数字输出引脚都可以使用toggle()来简单地在开、关状态之间切换: | + | 再次运行程序,我们会看到和之前一样的活动:板载LED会亮5秒、熄灭5秒,然后在无限循环中再次亮起来。我们会发现这一次的程序短了两行:我们对它进行了优化。所有数字输出引脚都可以使用toggle()来简单地在开、关状态之间切换: |
* 如果引脚目前是on, toggle()开关将让它变为off | * 如果引脚目前是on, toggle()开关将让它变为off | ||
* 如果引脚目前是off,toggle()开关将让它变为on | * 如果引脚目前是off,toggle()开关将让它变为on | ||
行 142: | 行 143: | ||
**挑战: 让LED点亮的时间更长** | **挑战: 让LED点亮的时间更长** | ||
- | 你会如何改变你的程序来让LED灯亮更久? 多休息一会儿怎么样? 在LED开关打开和关闭的情况下,你能使用的最小延迟是多少? | + | 如何改变我们的程序来让LED灯亮更久? 多休息一会儿怎么样? 在LED开关打开和关闭的情况下,我们能使用的最小延迟是多少? |
</WRAP> | </WRAP> | ||
### 2. 控制学习板上的LED | ### 2. 控制学习板上的LED | ||
- | 到目前为止,我们一直在使用树莓派Pico核心板,在其RP2040微控制器上运行MicroPython程序,改变板载LED的点亮和熄灭的状态。微控制器通常与更多的外部元器件一起使用,也正是为此,我们设计了这个基于Pico的学习板。在MicroPython中控制学习板上的LED与控制Pico核心板内部的LED没有什么不同,只是管脚的编号发生了变化而已。 | + | 到目前为止,我们一直在使用树莓派Pico核心板,在其[[RP2040]]微控制器上运行[[MicroPython]]程序,改变板载LED的点亮和熄灭的状态。微控制器通常与更多的外部元器件一起使用,也正是为此,我们设计了这个基于Pico的学习板。在MicroPython中控制学习板上的LED与控制Pico核心板内部的LED没有什么不同,只是管脚的编号发生了变化而已。 |
打开Thonny,加载前面写好的的Blink.py程序。找到: | 打开Thonny,加载前面写好的的Blink.py程序。找到: | ||
行 154: | 行 155: | ||
</code> | </code> | ||
- | 修改引脚编号,将它从连接到Pico核心板内部LED的引脚25更改为连接到学习板上红色LED的引脚19。这个LED的名称也最好随之修改,比如改为led_red。程序中所有用到该LED的地方,都要把名字修改过来: | + | 修改引脚编号,将它从连接到Pico核心板内部LED的引脚25更改为连接到学习板上红色LED的引脚26。这个LED的名称也最好随之修改,比如改为led_red。程序中所有用到该LED的地方,都要把名字修改过来: |
<code python> | <code python> | ||
import machine | import machine | ||
import utime | import utime | ||
- | led_red = machine.Pin(19, machine.Pin.OUT) | + | led_red = machine.Pin(26, machine.Pin.OUT) |
while True: | while True: | ||
行 173: | 行 174: | ||
### 3. 输入: 读取按钮开关 | ### 3. 输入: 读取按钮开关 | ||
- | 前面的LED都是利用了GPIO的输出特性,其实RP2040的GPIO既可以做输出控制,也可以做输入状态监测使用。在树莓派Pico核心板上没有放置任何输入按键,在我们的学习板上特地放了两个轻触按键: | + | 前面的LED都是利用了GPIO的输出特性,其实[[RP2040]]的[[GPIO]]既可以做输出控制,也可以做输入状态监测使用。在树莓派Pico核心板上没有放置任何输入按键,在我们的学习板上特地放了两个轻触按键: |
|按键|GPIO管脚编号| | |按键|GPIO管脚编号| | ||
|KEY1|12| | |KEY1|12| | ||
行 181: | 行 182: | ||
**隐藏起来的阻抗** | **隐藏起来的阻抗** | ||
- | 与LED不同的是,按钮开关不需要限流电阻。但它仍需要一个电阻器,用于上拉或下拉,取决于你的电路如何工作。没有上拉或下拉电阻,输入被称为浮动 - 这意味着它有一个“噪声”信号,即使你不按按钮,它也会触发。电路中的电阻在哪里? 藏在Pico的微控制器RP2040里,可以为每一个GPIO管脚编程电阻,根据电路的需要在MicroPython中设置为下拉电阻或上拉电阻。 | + | 与LED不同的是,按钮开关不需要限流电阻。但它仍需要一个电阻器,用于上拉或下拉,取决于你的电路如何工作。没有上拉或下拉电阻,输入被称为浮动 - 这意味着它有一个“噪声”信号,即使你不按按钮,它也会触发。电路中的电阻在哪里? 藏在Pico的微控制器[[RP2040]]里,可以为每一个[[GPIO]]管脚编程电阻,根据电路的需要在[[MicroPython]]中设置为下拉电阻或上拉电阻。 |
有什么区别呢?一个下拉电阻连接引脚接地,意思是当按钮没有按下时,输入是0。一个上拉电阻将引脚连接到3V3,这意味着当按钮没有被按下时,输入将是1。所有的电路在这本书中使用可编程电阻在下拉模式。 | 有什么区别呢?一个下拉电阻连接引脚接地,意思是当按钮没有按下时,输入是0。一个上拉电阻将引脚连接到3V3,这意味着当按钮没有被按下时,输入将是1。所有的电路在这本书中使用可编程电阻在下拉模式。 | ||
</WRAP> | </WRAP> | ||
- | 加载Tonny,然后用通常的代码行启动一个新程序: | + | 加载[[Thonny_ide|Thonny]],然后用通常的代码行启动一个新程序: |
<code python> | <code python> | ||
行 217: | 行 218: | ||
import utime | import utime | ||
- | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_DOWN) | + | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) |
while True: | while True: | ||
- | if key1.value() == 1: | + | if key1.value() == 0: |
print("You pressed the button!") | print("You pressed the button!") | ||
utime.sleep(2) | utime.sleep(2) | ||
行 232: | 行 233: | ||
实际上,这个电路将前两个电路合并成一个,你可能记得你使用引脚GP19驱动外学习板上红色的LED,并用引脚GP12读取学习板上的一个按键的状态,现在我们将输入按键和输出LED一起联动工作。 | 实际上,这个电路将前两个电路合并成一个,你可能记得你使用引脚GP19驱动外学习板上红色的LED,并用引脚GP12读取学习板上的一个按键的状态,现在我们将输入按键和输出LED一起联动工作。 | ||
- | 在Tonny中启动一个新程序,并开始导入程序需要的两个库: | + | 在Thonny中启动一个新程序,并开始导入程序需要的两个库: |
<code python> | <code python> | ||
行 242: | 行 243: | ||
<code python> | <code python> | ||
- | led_red = machine.Pin(19, machine.Pin.OUT) | + | led_red = machine.Pin(26, machine.Pin.OUT) |
- | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_DOWN) | + | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) |
</code> | </code> | ||
行 249: | 行 250: | ||
<code python> | <code python> | ||
while True: | while True: | ||
- | if key1.value() == 1: | + | if key1.value() == 0: |
</code> | </code> | ||
行 270: | 行 271: | ||
import utime | import utime | ||
led_red = machine.Pin(19, machine.Pin.OUT) | led_red = machine.Pin(19, machine.Pin.OUT) | ||
- | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_DOWN) | + | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) |
while True: | while True: | ||
- | if key1.value() == 1: | + | if key1.value() == 0: |
led_red.value(1) | led_red.value(1) | ||
utime.sleep(2) | utime.sleep(2) | ||
行 289: | 行 290: | ||
+ | <WRAP center round tip 60%> | ||
+ | 以下部分为其它与LED控制相关的参考案例。 | ||
+ | </WRAP> | ||
### 5. 案例汇总 | ### 5. 案例汇总 | ||
行 297: | 行 301: | ||
# rgb-blink.py | # rgb-blink.py | ||
- | # RED LED - Pico GPIO 19 | + | # RED LED - Pico GPIO 26 |
- | # GREEN LED - Pico GPIO 18 | + | # GREEN LED - Pico GPIO 22 |
- | # BLUE LED - Pico GPIO 17 | + | # BLUE LED - Pico GPIO 21 |
- | # YELLOW LED - Pico GPIO 16 | + | # YELLOW LED - Pico GPIO 20 |
# EETree Info & Tech 2021 | # EETree Info & Tech 2021 | ||
# https://www.eetree.cn | # https://www.eetree.cn | ||
行 308: | 行 312: | ||
import utime | import utime | ||
- | led_red = machine.Pin(19, machine.Pin.OUT) | + | led_red = machine.Pin(26, machine.Pin.OUT) |
- | led_green = machine.Pin(18, machine.Pin.OUT) | + | led_green = machine.Pin(22, machine.Pin.OUT) |
- | led_blue = machine.Pin(17, machine.Pin.OUT) | + | led_blue = machine.Pin(21, machine.Pin.OUT) |
- | led_yellow = machine.Pin(16,machine.Pin.OUT) | + | led_yellow = machine.Pin(20,machine.Pin.OUT) |
行 381: | 行 385: | ||
import utime | import utime | ||
- | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_DOWN) | + | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) |
key2 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP) | key2 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP) | ||
while True: | while True: | ||
- | if key1.value() == 1: | + | if key1.value() == 0: |
print("key1 pressed") | print("key1 pressed") | ||
| | ||
行 399: | 行 403: | ||
# interrrupt-toggle-demo.py | # interrrupt-toggle-demo.py | ||
- | # RED LED - Pico GPIO 19 | + | # RED LED - Pico GPIO 26 |
- | # GREEN LED - Pico GPIO 18 | + | # GREEN LED - Pico GPIO 22 |
# KEY1 - Pico GPIO 12 | # KEY1 - Pico GPIO 12 | ||
行 410: | 行 414: | ||
import utime | import utime | ||
- | led_red = machine.Pin(19, machine.Pin.OUT) | + | led_red = machine.Pin(26, machine.Pin.OUT) |
- | led_green = machine.Pin(18, machine.Pin.OUT) | + | led_green = machine.Pin(22, machine.Pin.OUT) |
led_red.value(0) | led_red.value(0) | ||
led_green.value(0) | led_green.value(0) | ||
- | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_DOWN) | + | key1 = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP) |
def int_handler(pin): | def int_handler(pin): | ||
行 427: | 行 431: | ||
key1.irq(handler=int_handler) | key1.irq(handler=int_handler) | ||
- | button_red.irq(trigger=machine.Pin.IRQ_RISING, handler=int_handler) | + | key1.irq(trigger=machine.Pin.IRQ_FALLING , handler=int_handler) |
while True: | while True: | ||
行 440: | 行 444: | ||
# switch-led-demo.py | # switch-led-demo.py | ||
- | # RED LED - Pico GPIO 19 | + | # RED LED - Pico GPIO 26 |
- | # GREEN LED - Pico GPIO 18 | + | # GREEN LED - Pico GPIO 22 |
- | # BLUE LED - Pico GPIO 17 | + | # BLUE LED - Pico GPIO 21 |
# BLACK BUTTON - Pico GPIO 2 - Pin 4 | # BLACK BUTTON - Pico GPIO 2 - Pin 4 | ||
行 452: | 行 456: | ||
import utime | import utime | ||
- | led_red = machine.Pin(19, machine.Pin.OUT) | + | led_red = machine.Pin(26, machine.Pin.OUT) |
- | led_green = machine.Pin(18, machine.Pin.OUT) | + | led_green = machine.Pin(22, machine.Pin.OUT) |
- | led_blue = machine.Pin(17, machine.Pin.OUT) | + | led_blue = machine.Pin(21, machine.Pin.OUT) |
led_red.value(0) | led_red.value(0) | ||
行 483: | 行 487: | ||
led_blue.value(0) | led_blue.value(0) | ||
</code> | </code> | ||
+ | |||
+ | ### 点亮Pico板上的一颗LED | ||
+ | |||
+ | <code python> | ||
+ | from machine import Pin,Timer | ||
+ | from time import sleep_us | ||
+ | |||
+ | led = Pin(25, Pin.OUT) | ||
+ | tim = Timer() | ||
+ | |||
+ | print("Flash LED.") | ||
+ | |||
+ | def tick(timer): | ||
+ | global led | ||
+ | led.toggle() | ||
+ | |||
+ | tim.init(freq=2, mode=Timer.PERIODIC, callback=tick) | ||
+ | |||
+ | </code> | ||
+ |