[STM32F4] STM32F429 使用 TCS34725 颜色传感器的驱动程序

[复制链接]
 楼主| 范德萨发额 发表于 2021-11-19 23:26 | 显示全部楼层
我这里让它直接干活去了,注意从 Idle 模式退出后,需要 2.4 ms 的时间来进行 RGBC 初始化,所以给个 3 ms 的延时就可以了。干完一次活后,如果不让它回去睡觉(Disable),就会自动继续干活,开始一个新的循环。(经@weixin_41605180提醒,原来这里写错了,应该是在设置AEN之后等待2.4 ms 的RGBC Init)
 楼主| 范德萨发额 发表于 2021-11-19 23:40 | 显示全部楼层
/***************************************************************************//**
* @brief TCS34725使能
*
* @return None
*******************************************************************************/
void TCS34725_Enable(void)
{
        unsigned char cmd = TCS34725_ENABLE_PON;
       
        TCS34725_Write(TCS34725_ENABLE, &cmd, 1);
        //delay_ms(3);//延时应该放在设置AEN之后
        cmd = TCS34725_ENABLE_PON | TCS34725_ENABLE_AEN;
        TCS34725_Write(TCS34725_ENABLE, &cmd, 1);
        delay_ms(3);
}
/***************************************************************************//**
* @brief TCS34725失能
*
* @return None
*******************************************************************************/
void TCS34725_Disable(void)
{
        unsigned char cmd = 0x00;
       
        TCS34725_Read(TCS34725_ENABLE, &cmd, 1);
        cmd = cmd & ~(TCS34725_ENABLE_PON | TCS34725_ENABLE_AEN);
        TCS34725_Write(TCS34725_ENABLE, &cmd, 1);
}
 楼主| 范德萨发额 发表于 2021-11-19 23:42 | 显示全部楼层
然后我们就可以拿到转换数据了,这里我根据自己的需要对 Arduino 的代码做了些修改

/***************************************************************************//**
* @brief TCS34725**单个通道数据
*
* @return data - 该通道的转换值
*******************************************************************************/
uint16_t TCS34725_GetChannelData(unsigned char reg)
{
        unsigned char tmp[2] = {0,0};
        uint16_t data = 0;
       
        TCS34725_Read(reg, tmp, 2);
        data = ((uint16_t)tmp[1] << 8) | tmp[0];
       
        return data;
}
/***************************************************************************//**
* @brief TCS34725**各个通道数据
*
* @return 1 - 转换完成,数据可用
*              0 - 转换未完成,数据不可用
*******************************************************************************/
uint8_t TCS34725_GetRawData(uint16_t *r, uint16_t *g, uint16_t *b, uint16_t *c)
{
        unsigned char status[1] = {0};

        status[0] = TCS34725_STATUS_AVALID;
       
        TCS34725_Read(TCS34725_STATUS, status, 1);
       
        if(status[0] & TCS34725_STATUS_AVALID)
        {
                *c = TCS34725_GetChannelData(TCS34725_CDATAL);       
                *r = TCS34725_GetChannelData(TCS34725_RDATAL);       
                *g = TCS34725_GetChannelData(TCS34725_GDATAL);       
                *b = TCS34725_GetChannelData(TCS34725_BDATAL);
                return 1;
        }
        return 0;
}
好了,到这里 TCS34725 的驱动程序就完成啦
tfqi 发表于 2021-12-11 09:11 | 显示全部楼层
这个是识别颜色的吗
wiba 发表于 2021-12-11 09:12 | 显示全部楼层
这种传感器的原理是什么呢
zljiu 发表于 2021-12-11 09:13 | 显示全部楼层
都可以识别多少种颜色呢
coshi 发表于 2021-12-11 09:14 | 显示全部楼层
通过光谱的识别是吗
aoyi 发表于 2021-12-11 09:15 | 显示全部楼层
本质其实还是对能量的捕获吧
modesty3jonah 发表于 2022-11-19 12:14 | 显示全部楼层
光线输出色彩是固定值数值吗?              
vivilyly 发表于 2022-11-20 10:50 | 显示全部楼层
tcs34725如何校对颜色?   
lihuami 发表于 2022-11-20 12:13 | 显示全部楼层
使用tcs34725颜色传感器可以在黑暗的情况下吗
mickit 发表于 2022-11-20 15:47 | 显示全部楼层
如何根据数值判断是否什么颜色范围呢?
cemaj 发表于 2022-11-24 15:50 | 显示全部楼层
这个tcs34725这个模块的灯怎么关?  
iyoum 发表于 2022-11-24 16:09 | 显示全部楼层
支持通过I2C接口输出RGB颜色数据和光照强度,具有高灵敏度、宽动态范围和测量精确等优点。
phoenixwhite 发表于 2022-12-12 13:40 | 显示全部楼层
每次使用TCS34725都需要校准的。
lzbf 发表于 2022-12-12 13:50 | 显示全部楼层
可以使用硬件iic驱动的吗?              
mikewalpole 发表于 2022-12-12 15:08 | 显示全部楼层
这个颜色的判断不准确的。              
wilhelmina2 发表于 2022-12-18 20:00 | 显示全部楼层
怎么才能判断颜色的范围呢?              
zerorobert 发表于 2022-12-19 20:36 | 显示全部楼层
STM32F429是否可执行图像的识别来判断颜色?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部