一、硬件介绍
1、主控开发板
使用的是XIAO ESP32S3开发板,集成ESP32S3 32位双核处理器芯片,最高运行频率240MHz,板载8MB PSRAM和8MB FLASH

功能引脚示意图

2、Grove Creator Kit 器件
在本次开发中,使用到的 `Grove Creator Kit 套件` 中的器件如下:
Grove - Tilt Switch
Grove-倾斜开关相当于一个按钮,用作数字输入;倾斜开关内部有一对小球,当外壳直立时,小球会与引脚接触。
倾斜外壳时,小球不接触,因此不形成连接;倾斜开关的SIG引脚通常输出低电平;
当倾斜开关直立时,倾斜开关内部的一对小球将与引脚接触,SIG引脚将输出高电平;

主要特性

Grove - Chainable RGB LED
基于P9813芯片,是一款全彩LED驱动器,提供了3个恒流驱动器以及256级灰度的调制输出;
通过2线传输(数据和时钟)与MCU通信;

主要特性
工作电压:5V
工作电流:20mA
通信协议:串行
二、功能实现
1、硬件搭建
将倾斜开关、RGB LED模块,通过Grove接口连接到开发板对应的引脚上;

实物搭建效果:

2、功能效果
通过倾斜开关模块的状态,切换RGB LED模块的开启与关闭,当倾斜开关模块处于倾斜状态时,开启RGB LED实现彩虹渐变效果;
当倾斜开关模块处于水平状态时,RGB LED处于关闭状态;
串口打印输出当前倾斜开关的状态;
倾斜状态(HIGH):LED 运行效果,彩虹色相循环一圈5秒,亮度完整呼吸(暗‑亮‑暗)周期同样5秒;
水平状态(LOW):LED 熄灭,再次倾斜时会接续之前LED状态继续运行;
三、代码编写
主要相关代码
#include <ChainableLED.h>
#define TILT_PIN D9 //倾斜开关引脚
#define LED_CLOCK D3
#define LED_DIN D4
ChainableLED leds(LED_CLOCK, LED_DIN, 1);
int tiltState = 0;
int lasttiltState = -1; // 上次倾斜状态
// 色相 亮度
float hue = 0.0;
float bri = 0.1;
bool bri_up = true;
//彩虹一圈5s,呼吸周期5s
const float hue_step = 0.006;
const float bri_step = 0.0072;
const int frame_delay = 30;
void setup() {
Serial.begin(115200);
pinMode(TILT_PIN, INPUT);
delay(100);
}
void loop(){
tiltState = digitalRead(TILT_PIN);
if(tiltState != lasttiltState)
{
lasttiltState = tiltState;
if (tiltState == HIGH)
{
Serial.println("当前处于倾斜状态");
}
else
{
Serial.println("当前处于水平状态");
}
}
if(tiltState == HIGH)
{
//倾斜时:彩虹、呼吸
leds.setColorHSB(0, hue, 1.0, bri);
hue += hue_step;
if(hue > 1.0) hue = 0.0;
if(bri_up)
{
bri += bri_step;
if(bri >= 0.7)
{
bri = 0.7;
bri_up = false;
}
}
else
{
bri -= bri_step;
if(bri <= 0.1)
{
bri = 0.1;
bri_up = true;
}
}
}
else
{
//水平时:LED熄灭
leds.setColorRGB(0, 0, 0, 0);
}
delay(frame_delay);
}四、程序烧录
1、连接USB数据线至开发板;
2、选择端口号对应的开发板;
3、点击 `上传` 烧录程序到开发板上;

五、效果演示

我要赚赏金
