完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、介绍
本模块是基于 AMS 的 TCS3472XFN 彩色光数字转换器为核心的颜色传感器,传感器提供红色,绿色,蓝色(RGB)和清晰光感应值的数字输出。集成红外阻挡滤光片可最大限度地减少入射光的红外光谱成分,并可精确地进行颜色测量。具有高灵敏度,宽动态范围和红外阻隔滤波器。最小化 IR 和 UV 光谱分量效应,以产生准确的颜色测量。并且带有环境光强检测和可屏蔽中断。通过 I2C 接口通信。 二、 参数 工作电压:3.3V/5V 控制芯片:TCS3472XFN 逻辑电压:3.3V/5V 通信接口:I2C 三、原理图 四、通信协议 1. I2C 通信: 一条数据线(SDA),一条时钟线(SCL)。 I2C 总线在传送数据 过程中共有三种类型信号:开始信号、结束信号和应答信号。 开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。 结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据 I2C 写时序 。 2. I2C 写时序: 首先主机会发送一个开始信号,然后将其 I2C 的 7 位地 址与写操作位组合成8 位的数据发送给从机, 从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机,从机接收到发送 响应信号,此时主机发送命令寄存的值,从机回应一个响应信号,直到主机发送一个停止信 号,此次 I2C 写数据操作结束。 3. I2C 读时序: 首先主机会发送一个开始信号,然后将其 I2C 的 7 位地址与写操作位组合成 8位的数 据发送给从机,从机接收到后会响应一个应答信号,主机此时将命令寄存器地址发送给从机, 从机接收到发送响应信号,此时主机重新发送一个开始信号,并且将其 7 位地址和读操作位 组合成 8 位的数据发送给从机,从机接收到信号后发送响应信号,再将其寄存器中的值发送 给主机,主机端给予响应信号,直到主机端发送停止信号,此次通信结束。 4. I2C 地址: I2C 设备地址为 0X29 注意:0X29 这个设备地址是 7 位的,8 位设备地址需要向高位移一位变成 0X52。 五、实验 测试使用的是 ARDUION UNO 开发板,波特率为 115200。 测试代码 #include 《Wire.h》 #include “MH_TCS34725.h” #include 《Adafruit_NeoPixel.h》 #ifdef __AVR__ #include 《avr/power.h》 #endif // Which pin on the Arduino is connected to the NeoPixels? // On a Trinket or Gemma we suggest changing this to 1 #define PIN 6 // How many NeoPixels are attached to the Arduino? #define NUMPIXELS 16 // our RGB -》 eye-recognized gamma color byte gammatable[256]; MH_TCS34725 tcs = MH_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(115200); Serial.println(“Color View Test!”); if (tcs.begin()) { Serial.println(“Found sensor”); } else { Serial.println(“No TCS34725 found 。.. check your connections”); while (1); // halt! } pixels.begin(); // This initializes the NeoPixel library. // thanks PhilB for this gamma table! // it helps convert RGB colors to what humans see for (int i=0; i《256; i++) { float x = i; x /= 255; x = pow(x, 2.5); x *= 255; gammatable[i] = x; } } void loop() { uint16_t clear, red, green, blue;//clear 函数的使用 ???? tcs.getRGBC(&red, &green, &blue, &clear); tcs.lock(); // turn off LED // Figure out some basic hex code for visualization uint32_t sum = clear; float r, g, b; r = red; r /= sum; g = green; g /= sum; b = blue; b /= sum; r *= 256; g *= 256; b *= 256; Serial.print(“t”); Serial.print((int)r, HEX); Serial.print(“t”); Serial.print((int)g, HEX); Serial.print(“t”); Serial.print((int)b, HEX); delay(1000); Serial.print(“t”); Serial.print((int)r, BIN); Serial.print(“t”); Serial.print((int)g, BIN); Serial.print(“t”); Serial.print((int)b, BIN); delay(1000); Serial.print(“t”); Serial.print((int)r); Serial.print(“t”); Serial.print((int)g); Serial.print(“t”); Serial.print((int)b); Serial.println(); //Serial.print((int)r ); Serial.print(“ ”); Serial.print((int)g);Serial.print(“ ”); Serial.println((int)b ); //Set the color lamp for(int i=0;i《NUMPIXELS;i++){ // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255 pixels.setPixelColor(i, pixels.Color(gammatable[(int)r], gammatable[(int)g], gammatable[(int)b])); // Moderately bright green color. // pixels.setPixelColor(i, pixels.Color((int)r, (int)g, (int)b)); pixels.show(); // This sends the updated pixel color to the hardware. // delay(500); // Delay for a period of time (in milliseconds)。 } } |
|
|
|
只有小组成员才能发言,加入小组>>
2513 浏览 0 评论
1083浏览 2评论
700浏览 1评论
452浏览 0评论
193浏览 0评论
328浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:02 , Processed in 1.253973 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号