1. 可编程全彩LED

三颗全彩LED,每种颜色可实现0~255共256级亮度调节,通过对红(Red)、绿(Green)、蓝(Blue)三个颜色通道的调节可叠加发出不同颜色的光。

../../_images/rgb_led.png

1.1. 应用编程接口说明

'''
 导入 rgb_led 模块
'''
from openaie import rgb_led

'''
 类: 可编程全彩LED
 参数:
    port: 端口号 -- 1~8
    num: 灯珠数量,默认为 3
'''
rgb_led(port, num=3)

'''
 方法:设置灯颜色值
 参数:
    id:板载灯编号 -- 0, 1, 2
    (r, g, b):颜色亮度值 -- 0~255
'''
rgb_led.set(id, (r, g, b))

'''
 方法:将设置值输出显示
'''
rgb_led.display()

Note

每种颜色的LED共有2^8=256(0~255)个发光等级,即共有2^8^3=16 777 216种颜色组合。通过查找 RGB颜色对照表 生成自己喜欢的颜色。

1.2. 案例

1. 点亮LED

import time
from openaie import rgb_led     # 导入模块

rgb = rgb_led(1)            # 端口1
rgb.set(0, (50, 0, 0))      # 将第1个灯设置为红色亮度值为:50
rgb.set(1, (0, 60, 0))      # 将第2个灯设置为绿色亮度值为:60
rgb.set(2, (0, 0, 70))      # 将第3个灯设置为蓝色亮度值为:70
rgb.display()               # 输出显示
time.sleep_ms(1000)

color = ((50,0,0), (0,50,0), (0,0,50), (0,0,0))
for i in range(4):
    rgb.set(0, color[i])
    rgb.set(1, color[i])
    rgb.set(2, color[i])
    rgb.display()
    time.sleep_ms(500)

2. 呼吸灯

import time
from openaie import rgb_led

rgb = rgb_led(1)
dir = True
while True:
    for i in range(100):
        if dir :
            rgb.set(0, (0,i,0))
        else :
            rgb.set(0, (0,100-i,0))
        rgb.display()
        time.sleep_ms(20)
    dir = not dir

3. 颜色渐变

参考 RGB彩虹色渐变算法

import time
from openaie import rgb_led

rgb = rgb_led(1)

def wheel(pos):
    # 通过改变在0和255之间的每个颜色参数产生彩虹色光谱
    # Input a value 0 to 255 to get a color value.
    # The colours are a transition r - g - b - back to r.
    if pos < 0 or pos > 255:
        r = g = b = 0
    elif pos < 85:
        r = int(pos * 3)
        g = int(255 - pos*3)
        b = 0
    elif pos < 170:
        pos -= 85
        r = int(255 - pos*3)
        g = 0
        b = int(pos*3)
    else:
        pos -= 170
        r = 0
        g = int(pos*3)
        b = int(255 - pos*3)
    return (r, g, b)

def rainbow_cycle(wait_ms):
    # 彩虹效果
    n=3
    for j in range(255):
        for i in range(n):
            pixel_index = (i * 256 // n) + j
            rgb.set(i, wheel(pixel_index & 255))
        rgb.display()
        time.sleep_ms(wait_ms)

while True:
    rainbow_cycle(10)