前言
上回玩了下最基本的LED,直接通過數字引腳點亮LED,很基本。這次來玩一下基本+1的東西,RGB LED。
RGB LED呼吸燈實驗
RGB LED能發出三種顏色的光,Red、Green和Blue,而LED是Light Emitting Diode發光二極管,因此RGB LED也是由二極管組成的。將三種顏色的LED集成在一個器件中,那就是RGB LED。RGB LED擁有4個引腳,長腳爲公共端,爲二極管公用正極,其他三個引腳分別對應三種顏色的LED的負極。
如圖所示:
RGB的每一個顏色通道具有255級亮度,若加上不發光,則一共有256級。因此RGB一共可以創造2563 = 16777216種顏色,亮度爲各級亮度的總和。實驗中可通過PWM使其顯示不同的顏色。
Arduino的analogWrite()函數將模擬值(PWM波)輸出到管腳。可用於在不同的光線亮度調節發光二極管亮度或以不同的速度驅動馬達。調用analogWrite()後,該引腳將產生一個指定佔空比的穩定方波,直到下一次調用analogWrite()(或在同一引腳調用digitalRead()或digitalWrite())。PWM的信號頻率約爲490赫茲。
語法爲analogWrite(pin, value),其中pin爲管腳,value爲高電平佔用(0到255),因此value = 0時爲常關,value = 255時爲常開。
電路連接:
實物:
寫代碼時發現示例中有點問題,setcolor()中爲255時才表示對應的燈熄滅,而不是示例中的0。經過思考和修改之後,不同的代碼得到不同的現象:
代碼1:
#define RGB_RED 11
#define RGB_GREEN 10
#define RGB_BLUE 9
void setup()
{
pinMode(RGB_RED,OUTPUT);
pinMode(RGB_GREEN,OUTPUT);
pinMode(RGB_BLUE,OUTPUT);
}
void setcolor(int red, int green, int blue)
{
analogWrite(RGB_RED,red);
analogWrite(RGB_GREEN,green);
analogWrite(RGB_BLUE,blue);
}
void loop()
{
int i;
for(i=255;i>=0;i--)
{
setcolor(i,i,i);
delay(4);
}
delay(1000);
}
現象1:
代碼2:
#define RGB_RED 11
#define RGB_GREEN 10
#define RGB_BLUE 9
void setup()
{
pinMode(RGB_RED,OUTPUT);
pinMode(RGB_GREEN,OUTPUT);
pinMode(RGB_BLUE,OUTPUT);
}
void setcolor(int red, int green, int blue)
{
analogWrite(RGB_RED,red);
analogWrite(RGB_GREEN,green);
analogWrite(RGB_BLUE,blue);
}
void loop()
{
int i;
for(i=0;i<256;i++)
{
setcolor(i,255,255);
delay(4);
}
delay(1000);
for(i=0;i<256;i++)
{
setcolor(255,i,255);
delay(4);
}
delay(1000);
for(i=0;i<256;i++)
{
setcolor(255,255,i);
delay(4);
}
delay(1000);
}
現象2:
代碼3:
#define RGB_RED 11
#define RGB_GREEN 10
#define RGB_BLUE 9
void setup()
{
pinMode(RGB_RED,OUTPUT);
pinMode(RGB_GREEN,OUTPUT);
pinMode(RGB_BLUE,OUTPUT);
}
void setcolor(int red, int green, int blue)
{
analogWrite(RGB_RED,red);
analogWrite(RGB_GREEN,green);
analogWrite(RGB_BLUE,blue);
}
void loop()
{
int i;
for(i=255;i>=0;i--)
{
setcolor(i,255,255);
delay(4);
}
delay(1000);
for(i=255;i>=0;i--)
{
setcolor(255,i,255);
delay(4);
}
delay(1000);
for(i=255;i>=0;i--)
{
setcolor(255,255,i);
delay(4);
}
delay(1000);
}
現象3:
加個開關
瞧瞧沒見過世面的我發現了什麼!在工具盒裏面抓出三個四腳開關。在網上找一下這個東西是咋回事:四腳開關按下後四個腳連通,釋放後兩對腳分別相連。
很好,那麼就來個按鍵就亮,釋放就黑的電路:
代碼就用常亮代碼:
#define RGB_RED 11
#define RGB_GREEN 10
#define RGB_BLUE 9
void setup()
{
pinMode(RGB_RED,OUTPUT);
pinMode(RGB_GREEN,OUTPUT);
pinMode(RGB_BLUE,OUTPUT);
}
void setcolor(int red, int green, int blue)
{
analogWrite(RGB_RED,red);
analogWrite(RGB_GREEN,green);
analogWrite(RGB_BLUE,blue);
}
void loop()
{
setcolor(0,0,0);
}
那麼就:
總結
總的來說姿勢水平沒有太大提升來着,本來想用Mixly完成的可以提升一下技能,後面發現庫有點問題就只好先作罷,這回實驗算是加深一下對各種器件的認識,RGB LED,四腳開關等,另外熟悉一下Arduino的語法和PWM波。
生命不息,學習不已。——沃·茲基·碩德