“颜色”的版本间的差异
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献) (→技术参数) |
Tangliufeng(讨论 | 贡献) (→MicroPython示例) |
||
第25行: | 第25行: | ||
<pre style="color:blue"> | <pre style="color:blue"> | ||
from microbit import * | from microbit import * | ||
+ | import math | ||
− | def | + | def getColor(): |
− | i2c.write( | + | color = [0, 0, 0] |
− | sleep(2) | + | i2c.write(0x0a, bytearray([1])) |
− | + | sleep(100) | |
− | + | i2c.write(0x0a, bytearray([2])) | |
− | return | + | state = i2c.read(0x0a, 1) |
+ | if state[0] == 3: | ||
+ | i2c.write(0x0a, bytearray([3])) | ||
+ | c = i2c.read(0x0a, 6) | ||
+ | color[0] = c[5]*256+c[4] # color R | ||
+ | color[1] = c[1]*256+c[0] # color G | ||
+ | color[2] = c[3]*256+c[2] # color B | ||
+ | maxColor = max(color[0], color[1], color[2]) | ||
+ | if maxColor > 255: | ||
+ | scale = 255/maxColor | ||
+ | color[0] = int(color[0]*scale) | ||
+ | color[1] = int(color[1]*scale) | ||
+ | color[2] = int(color[2]*scale) | ||
+ | return color | ||
− | |||
while True: | while True: | ||
− | print( | + | c = getColor() |
− | sleep( | + | print("R: %d, G: %d, B: %d" % (c[0], c[1], c[2])) |
− | + | sleep(200) | |
</pre> | </pre> | ||
=== 图形化示例 === | === 图形化示例 === |
2017年12月19日 (二) 14:58的版本
概述
基于不同颜色物体对于RGB光线反射率不同的原理来分辨物体的颜色RGB分量。采用I2C通讯,操作简单,直接输出被测物体RGB分量值。
技术参数
- 工作电压:3.3V~5V
- 接口方式:I2C接口
- 模块尺寸:24x46x7.5mm
引脚定义
VCC | 电源 |
SDA | I2C数据 |
SCL | I2C时钟 |
GND | 地 |
使用教程
连接示意图
Arduino示例
MicroPython示例
from microbit import * import math def getColor(): color = [0, 0, 0] i2c.write(0x0a, bytearray([1])) sleep(100) i2c.write(0x0a, bytearray([2])) state = i2c.read(0x0a, 1) if state[0] == 3: i2c.write(0x0a, bytearray([3])) c = i2c.read(0x0a, 6) color[0] = c[5]*256+c[4] # color R color[1] = c[1]*256+c[0] # color G color[2] = c[3]*256+c[2] # color B maxColor = max(color[0], color[1], color[2]) if maxColor > 255: scale = 255/maxColor color[0] = int(color[0]*scale) color[1] = int(color[1]*scale) color[2] = int(color[2]*scale) return color while True: c = getColor() print("R: %d, G: %d, B: %d" % (c[0], c[1], c[2])) sleep(200)