学会了如何发声,下来就要开始学如何发光;虽然一开始在按键扫描那章有看到LED闪烁,但,,,,那真的太简单了。本章我们学习高大上的多彩LED。 原理大放送: 多彩LED又称为RGB灯,内置红(R)、绿(G)、蓝(B)三个灯珠,通过调节不同灯的亮度就可以混合出万千色彩。调节灯的亮度?没错就是你脑子现在想的那种方式!!! 其实就两种方式,电压或电流。这里我们采用一款性能优良的IC进行驱动,P9813,这是一款全彩点光源LED驱动芯片,采用CMOS工艺,提供三路恒流驱动及256级灰度调制输出。通信接口采用双线传输方式(DATA与CLK),内建再生(就是功率放大),可获得更远的传输距离,可用于驱动显示灯光变换、各式字符变换、彩色动漫图案............嗯,说好了全是放干货!具体细节可以去找度娘 原理图如下: 由于U2上电直接驱动RGB灯开始工作,而且颜色值随机。为了避免不使用的时候可以关闭它,所以采用MOS管Q2作为电源软开关,当AR_D12引脚输出高电平时,芯片才会上电工作。而Arduino上电默认引脚为低电平,这样可以保证上电后RGB灯不会突然点亮,吓坏小伙伴怎么办。 代码示例: #include "ChainableLED.h" #define NUM_LEDS 1 /* I/O define */ const int rgb_pwr = 12; //rgb power control const int clk_pin = 6; //clock const int data_pin = 5; //data const int analog_pin = 0; //pot input /* variable */ float hue = 0.0; boolean up = true; ChainableLED leds(clk_pin, data_pin, rgb_pwr, NUM_LEDS); //defines the pin used on arduino. void setup() { leds.pwr_set(PWR_ENABLE); //open the rgb power supply } void loop() { delay(30); for (byte i=0; i < NUM_LEDS; i++) leds.setColorHSB(i, hue, 1.0, 0.5); if (up) hue+= 0.025; else hue-= 0.025; if (hue > =1.0 && up) up = false; else if (hue<=0.0 && !up) up = true; } 附件: |