【杰发科技AC7802x测评】+色彩识别仪

AC7802x开发板是一款十分便于功能移植的开发板,先前曾在其它开发板上实现过以色彩传感器检测色彩的功能,这次将它移植到AC7802x开发板上进行了一下尝试,实践证明实现起来还是比较容易的,其状态构成如图1所示。

图1 整体构成
这里所所用的色彩传感器是TCS34725,它是一款以I2C接口工作的器件,并在功能模块上配置了LED灯以照亮检测目标。
在显示方面,则仍使用0.96寸的彩色LCD显示屏,它与开发板的连接关系为:
CLK---PB5
DIN---PB3
RES--PB4
DC ---PB6
CS ---PA8
BLK--- PB7
色彩传感器与开发板的连接关系为:
SDA ----PA0
SCL ----PA1
所用引脚输出高低电平的定义为:
#defineTCS_SCL_H       GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_HIGH)
#defineTCS_SCL_L       GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_LOW)
#defineTCS_SDA_H       GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_HIGH)
#defineTCS_SDA_L       GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_LOW)
为读取数据所作的相应定义为:
#defineTCS_SDA_READ    GPIO_GetPinLevel(GPIOA,GPIO_PIN0)
实现输入、输出模式设置的语句定义为:
#defineTCS_SDA_IN()     GPIO_SetDir(GPIOA, GPIO_PIN0, GPIO_IN)
#defineTCS_SDA_OUT()   GPIO_SetDir(GPIOA,GPIO_PIN0, GPIO_OUT)
色彩传感器的引脚配置函数为:
复制
void TCS34725_I2C_Init()

{

          GPIO_SetFunc(GPIOA, GPIO_PIN0,GPIO_FUN0);

          GPIO_SetDir(GPIOA, GPIO_PIN0,GPIO_OUT);

          GPIO_SetFunc(GPIOA, GPIO_PIN1,GPIO_FUN0);

          GPIO_SetDir(GPIOA, GPIO_PIN1,GPIO_OUT);

}

实现I2C发送起始和停止信号的函数为:
复制
void TCS34725_I2C_Start()

{

        TCS_SDA_OUT();

        TCS_SDA_H;

        TCS_SCL_H;

        delay_us(4);

        TCS_SDA_L;

        delay_us(4);

        TCS_SCL_L;

}



void TCS34725_I2C_Stop()

{

        TCS_SDA_OUT();

        TCS_SCL_L;

        TCS_SDA_L;

        delay_us(4);

        TCS_SCL_H;

        TCS_SDA_H;

        delay_us(4);

}

进行字节数据发送与接收的函数为:
复制
void TCS34725_I2C_Send_Byte(u8 byte)

{

        u8 i;

        TCS_SDA_OUT();

        TCS_SCL_L;

        for(i = 0; i < 8; i++)

        {

                if(((byte&0x80)>>7)==1)TCS_SDA_H;

                else

                        TCS_SDA_L;

                byte <<= 1;

                delay_us(2);

                TCS_SCL_H;

                delay_us(2);

                TCS_SCL_L;

                delay_us(2);

        } 

}



u8 TCS34725_I2C_Read_Byte(u8 ack)

{

        u8 i,receive = 0;

        TCS_SDA_IN();

        for(i = 0; i < 8; i++)

        {

                TCS_SCL_L;

                delay_us(2);

                TCS_SCL_H;

                receive <<= 1;

                if(TCS_SDA_READ) receive++;

                delay_us(1);

        }

        if (!ack) TCS34725_I2C_NACK();

        else TCS34725_I2C_ACK(); 

        return receive;

}

进行传感器初始化的函数为:
复制
u8 TCS34725_Init(void)

{

        u8 id=0;

        TCS34725_I2C_Init(); 

        TCS34725_Read(TCS34725_ID, &id, 1);

        if(id==0x4D | id==0x44)

        {

                        TCS34725_SetIntegrationTime(TCS34725_INTEGRATIONTIME_50MS);

                        TCS34725_SetGain(TCS34725_GAIN_1X);

                        TCS34725_Enable();

                        return 1;

                }

        return 0;

}

读取色彩检测值的函数为:
复制
u8 TCS34725_GetRawData(COLOR_RGBC *rgbc)

{

        u8 status = TCS34725_STATUS_AVALID;

        

        TCS34725_Read(TCS34725_STATUS, &status, 1);

        

        if(status & TCS34725_STATUS_AVALID)

        {

                rgbc->c = TCS34725_GetChannelData(TCS34725_CDATAL);        

                rgbc->r = TCS34725_GetChannelData(TCS34725_RDATAL);        

                rgbc->g = TCS34725_GetChannelData(TCS34725_GDATAL);        

                rgbc->b = TCS34725_GetChannelData(TCS34725_BDATAL);

                return 1;

        }

        return 0;

}

为了满足显示的需要,所配置的矩形框绘制函数为:
复制
void LCD_DrawRectangle(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)

{

        LCD_DrawLine(x1,y1,x2,y1);

        LCD_DrawLine(x1,y1,x1,y2);

        LCD_DrawLine(x1,y2,x2,y2);

        LCD_DrawLine(x2,y1,x2,y2);

}

所配置的色彩填充函数为:
复制
void LCD_ShowBOX(u16 x1,u16 y1,u16 x2,u16 y2,u16 c)

{

      int i;

      LCD_Address_Set(x1,y1,x2,y2);

      for(i=0;i<N;i++)

      {

            LCD_WR_DATA8(c>>8);

            LCD_WR_DATA8(c&0xff);

      }

}

进行色彩识别检测的主程序为:
复制
int main(void)

{

        u8 R,G,B;

        u16 g;

         InitDelay();

    InitDebug();

    GPIO_LedInit();

    GPIO_KeyInit();

    TIMER_PrdInit();

        mdelay(200);

        LCD_GPIO();

        Lcd_Init();

    BACK_COLOR=BLACK;

        LCD_Clear(BLACK);

    LCD_ShowString(30,5,"TCS34725",YELLOW); 

        LCD_ShowString(20,25,"R:",RED);

        LCD_ShowString(52,25,"G:",GREEN);

        LCD_ShowString(84,25,"B:",BLUE);

        LCD_DrawRectangle(119, 23, 140, 45);

        TCS34725_Init();

        while (1)

    {

                   TCS34725_GetRawData(&rgb);

                  RGBtoHSL(&rgb,&hsl);

                  R=255*rgb.r/rgb.c;

                  G=255*rgb.g/rgb.c;

                  B=255*rgb.b/rgb.c;

                  LCD_ShowNum(20,45,R,3,YELLOW);

                  LCD_ShowNum(52,45,G,3,YELLOW);

                  LCD_ShowNum(84,45,B,3,YELLOW);

                  g=(R>>3)<<11;

                  g=g+((G>>2)<<5)+(B>>3);  

                  LCD_ShowBOX(120,24,139,44,g);

                  mdelay(500);

          GPIO_ToggleLedPrd();

    }

}

经程序的编译与下载,其测试效果图2和图3所示,说明该传感器能完成色彩识别的功能。

图2 测试绿色

图3测试红色

通过这次对AC7802x开发板测评,证明该开发板是一款非常易于上手的开发板,并在功能移植方面也较为顺利,它是一款值得推荐的开发工具。在此再次对活动的组织者及提供产品的厂家表示衷心地感谢!
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3318692-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值