# 项目二十六 按键控制RGB灯

## 1.实验说明

在前面课程中，利用旋转编码器计数然后控制RGB模块。在这一课程中，利用代码，计算出按下模块上按键的次数。设置计数代码时，可以参考第四章实验十七的计数代码。然后将所得数据除以三，所得余数为0 1 2三种。然后通过不同的余数，控制RGB模块上LED显示不同的颜色。

这样，就可以通过不断的按下按键，任意调节RGB模块上LED显示不同颜色了（三种颜色）。

## 2.实验器材

- keyes brick 插件RGB模块*1

- keyes UNO R3开发板*1

- keyes brick 按键传感器*1

- 传感器扩展板*1

- 4P双头XH2.54连接线*1

- 3P 双头XH2.54连接线*1

- USB线*1

## 3.接线图

![](media/image-20251023160646882.png)

## 4.测试代码

![](media/image-20251023160701054.png)

## 5.代码说明

1. 在![](media/image-20251023110243239.png)单元内，找到以下元件。

![](media/image-20251023160750034.png)

![](media/image-20251023160759535.png)

2. 通过以下表格，我们可以了解这个代码的逻辑设置。

| 初始设置           | PushCounter设置为0（累计通过物体数目） PushCounter1设置为0（累计通过物体数目除以3的余数） State设置为1（传感信号端数值） lastState设置为1（传感器信号端上一循环数值） |                                 |                        |
| ------------------ | ------------------------------------------------------------ | ------------------------------- | ---------------------- |
| 按键按下（一瞬间） | State检测到变为0，lastState为1，两个数据不相等。             | PushCounter设置为PushCounter加1 | PushCounter1加1或变为0 |
| 长按按键（循环）   | State检测到变为0，lastState设置为0，两个数据相等。           | PushCounter不变                 | PushCounte1不变        |
| 松开按键（一瞬间） | State检测到变为1，lastState设置为0，两个数据不相等。         | PushCounter不变                 | PushCounte1不变        |
| 按键松开（循环）   | State检测到变为1，lastState设置为1，两个数据相等。           | PushCounter不变                 | PushCounte1不变        |
| PushCounte1为0     | 设置RGB模块上LED显示红色                                     |                                 |                        |
| PushCounte1为1     | 设置RGB模块上LED显示绿色                                     |                                 |                        |
| PushCounte1为2     | 设置RGB模块上LED显示蓝色                                     |                                 |                        |

## 6.测试结果

上传测试代码成功，按照接线图接好线，利用USB上电后，打开串口监视器，设置波特率为9600；串口监视器显示![](media/image-20251023160925462.png)数据，不断按下按键，![](media/image-20251023160925462.png)数据在0 1 2中变化。当![](media/image-20251023160925462.png)为0时，RGB模块上LED显示红色；当![](media/image-20251023160925462.png)为1时，RGB模块上LED显示绿色；当![](media/image-20251023160925462.png)为2时，RGB模块上LED显示蓝色。

![image-20251209151240551](./media/image-20251209151240551.png)