andeyqi 发表于 2026-7-10 15:44:06

【瑞萨RA-eco-RA6M4评测】光感应灯控制

本帖最后由 andeyqi 于 2026-7-10 15:44 编辑

### 简介

在之前的帖子中我们已经完成了软件环境的适配及I2C总线的驱动适配,我们在此基础上外接BH1750 的光强传感器,根据传感器的光强自动自动控制板载的LED 点亮熄灭,模拟感应灯的实现。

以下是BH1750 的框图,传感器将光强数据经过ADC转换后我们可以使用I2C来读取。
!(//m.qjumbo.com/forum/data/attachment/forum/202607/10/150544yp003qqp7b30sdnm.png)

以下是传感器内部检测的状态机
!(//m.qjumbo.com/forum/data/attachment/forum/202607/10/150827o11rdrzmnasndo81.png)

以下是控制的寄存器配置
!(//m.qjumbo.com/forum/data/attachment/forum/202607/10/150907iqxnzpnkxnnvojxe.png)

结合上述信息来看传感器的使用还是很简单的只要配置几个传感器即可。
本地编写如下任务代码初始化传感器,并根据读取的传感器控制LED的点亮熄灭。

```
/* bh1750 entry function */
/* pvParameters contains TaskHandle_t */
void bh1750_thread_entry(void *pvParameters)
{
    FSP_PARAMETER_NOT_USED (pvParameters);
    fsp_err_t err;
    vTaskDelay (300);
    uint8_t bh1750_ins;
    uint8_t bh1750_data;
    uint32_t bh1750_data16;
    /* Init I2C */
    err = R_SCI_I2C_Open(&g_i2c3_ctrl,&g_i2c3_cfg);
    if(FSP_SUCCESS != err)
    {
      printf("i2c init failed %d \r\n",err);
    }

    R_SCI_I2C_SlaveAddressSet(&g_i2c3_ctrl, 0x23, I2C_MASTER_ADDR_MODE_7BIT);


    /* bh1750 power on */
    bh1750_ins = 1;
    R_SCI_I2C_Write(&g_i2c3_ctrl, &bh1750_ins, 1, true);
    vTaskDelay (5);
    /*bh1750 reset */
    bh1750_ins = 7;
    R_SCI_I2C_Write(&g_i2c3_ctrl, &bh1750_ins, 1, true);
    vTaskDelay (5);
    /* Start measurement at 0.5lx resolution.
       Measurement Time is typically 120ms. */
    bh1750_ins = 0x11;
    R_SCI_I2C_Write(&g_i2c3_ctrl, &bh1750_ins, 1, true);
    vTaskDelay (5);

    while (1)
    {
      R_SCI_I2C_Read(&g_i2c3_ctrl, &bh1750_data, 2, true);
      bh1750_data16 = (bh1750_data << 8) + bh1750_data;
      printf("sensor data %d \r\n",bh1750_data16);
      if(bh1750_data16 < 30)
      {
            /* led on */
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_02,BSP_IO_LEVEL_HIGH);
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_04,BSP_IO_LEVEL_HIGH);
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_05,BSP_IO_LEVEL_HIGH);
      }
      else
      {
            /* led off */
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_02,BSP_IO_LEVEL_LOW);
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_04,BSP_IO_LEVEL_LOW);
            R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_04_PIN_05,BSP_IO_LEVEL_LOW);
      }
      vTaskDelay (500);
    }
}
```

运行效果如下,LED 已经根据光强来控制点亮熄灭。
!(//m.qjumbo.com/forum/data/attachment/forum/202607/10/154357u97y5sqt3ta94nun.gif)



页: [1]
查看完整版本: 【瑞萨RA-eco-RA6M4评测】光感应灯控制

Baidu
map