这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » Grove Creator Kit开发指南【倾斜状态RGB指示灯】

共1条 1/1 1 跳转至

Grove Creator Kit开发指南【倾斜状态RGB指示灯】

菜鸟
2026-08-24 21:48:33     打赏

一、硬件介绍

1、主控开发板

使用的是XIAO ESP32S3开发板,集成ESP32S3 32位双核处理器芯片,最高运行频率240MHz,板载8MB PSRAM和8MB FLASH

1787576271514383.png





功能引脚示意图

1787576305327340.png


2、Grove Creator Kit 器件

在本次开发中,使用到的 `Grove Creator Kit 套件` 中的器件如下:


Grove - Tilt Switch

Grove-倾斜开关相当于一个按钮,用作数字输入;倾斜开关内部有一对小球,当外壳直立时,小球会与引脚接触。

倾斜外壳时,小球不接触,因此不形成连接;倾斜开关的SIG引脚通常输出低电平;

当倾斜开关直立时,倾斜开关内部的一对小球将与引脚接触,SIG引脚将输出高电平;

image-20260821220743228.png


主要特性

image.png


Grove - Chainable RGB LED

基于P9813芯片,是一款全彩LED驱动器,提供了3个恒流驱动器以及256级灰度的调制输出;

通过2线传输(数据和时钟)与MCU通信;


image-20260821171844602.png


主要特性

工作电压:5V

工作电流:20mA

通信协议:串行



二、功能实现

1、硬件搭建

将倾斜开关、RGB LED模块,通过Grove接口连接到开发板对应的引脚上;

image.png


实物搭建效果:

image-20260821221729622.png



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、点击 `上传` 烧录程序到开发板上;

image-20260818173949849.png



五、效果演示


5.gif








共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]