日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号

發(fā)布時間:2024/4/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用樹莓派實現(xiàn)RGB LED的顏色控制

RGB色彩模式是工業(yè)界的一種顏色標準。是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代

表紅、綠、藍三個通道的顏色。這個標準差點兒包含了人類視力所能感知的全部顏色,是眼下運用最廣的顏色系統(tǒng)之中的一個。RGB色彩模式使用RGB模型為圖像中每個像素的RGB分量分配一個0~255范圍內(nèi)的強度值。

RGB圖像僅僅使用三種顏色。就能夠使它們依照不同的比例混合,從而得到各種各樣的顏色。

在實際的控制中。往往通過PWM來實現(xiàn)LED亮度(顏色深度)的控制。

樹莓派僅僅有一路硬件PWM輸出(GPIO1),但是要實現(xiàn)RGB

LED的控制。須要3路PWM。事實上。wiringPi庫為我們提供了用軟件多線程實現(xiàn)的PWM輸出,我們能夠利用這個庫提供的函數(shù)非常方便的將隨意GPIO配置為PWM輸出。在本例中。我將GPIO0,GPIO1。GPIO2配置成了soft

PWM輸出。樹莓派的引腳分配表例如以下圖所看到的:

我用的RGB LED是共陰極的,與樹莓派的連接方式例如以下:

Raspberry Pi ? ? ? ? ? ? ? ? RGB LED module

GPIO0--------------------------------------R

GPIO1-------------------------------------G

GPIO2--------------------------------------B

GND----------------------------------------‘-’

實物圖例如以下:

源碼:

#include

#include

#include

#define uchar unsigned char

#define LedPinRed 0

#define LedPinGreen 1

#define LedPinBlue 2

void ledInit(void)

{

softPwmCreate(LedPinRed, 0, 100);

softPwmCreate(LedPinGreen,0, 100);

softPwmCreate(LedPinBlue, 0, 100);

}

void ledColorSet(uchar r_val, uchar g_val, uchar b_val)

{

softPwmWrite(LedPinRed, r_val);

softPwmWrite(LedPinGreen, g_val);

softPwmWrite(LedPinBlue, b_val);

}

int main(void)

{

int i;

if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen

printf("setup wiringPi failed !");

return 1;

}

ledInit();

while(1){

ledColorSet(0xff,0x00,0x00); //red

delay(500);

ledColorSet(0x00,0xff,0x00); //green

delay(500);

ledColorSet(0x00,0x00,0xff); //blue

delay(500);

ledColorSet(0xff,0xff,0x00); //yellow

delay(500);

ledColorSet(0xff,0x00,0xff); //pick

delay(500);

ledColorSet(0xc0,0xff,0x3e);

delay(500);

ledColorSet(0x94,0x00,0xd3);

delay(500);

ledColorSet(0x76,0xee,0x00);

delay(500);

ledColorSet(0x00,0xc5,0xcd);

delay(500);

}

return 0;

}

將此代碼保存為rgb.c。

編譯代碼:

gcc ?rgb.c ?-o ?rgb ?-lwiringPi ?-lpthread

執(zhí)行代碼:

./rgb

注意:

1,-lwiringPi選項:指明了要鏈接到wiringpi庫,由于softPwm的實現(xiàn)就在此庫;

2。-lpthread選項:由于softPwm的實現(xiàn)用了Linux的多線程機制。所以加這個編譯選項。

代碼和演示視頻已分享到360云盤:

訪問passworde0da

訪問passwordd6b1

下面是改進后的代碼。編譯方式同上。

#include

#include

#include

#define LedPinRed 0

#define LedPinGreen 1

#define LedPinBlue 2

int colors[] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x9400D3};

/******************************************************************************************

* 將一個數(shù)從一個區(qū)間線性映射到還有一個區(qū)間。比方將0~100之間的一個數(shù)映射到0~255之間

******************************************************************************************/

int map(int x, int in_min, int in_max, int out_min, int out_max)

{

return (x -in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

}

void ledInit(void)

{

softPwmCreate(LedPinRed, 0, 100); //create a soft pwm, original duty cycle is 0Hz, range is 0~100

softPwmCreate(LedPinGreen,0, 100);

softPwmCreate(LedPinBlue, 0, 100);

}

void ledColorSet(int color) //set color, for example: 0xde3f47

{

int r_val, g_val, b_val;

r_val = (color & 0xFF0000) >> 16; //get red value

g_val = (color & 0x00FF00) >> 8; //get green value

b_val = (color & 0x0000FF) >> 0; //get blue value

r_val = map(r_val, 0, 255, 0, 100); //change a num(0~255) to 0~100

g_val = map(g_val, 0, 255, 0, 100);

b_val = map(b_val, 0, 255, 0, 100);

softPwmWrite(LedPinRed, 100 - r_val); //change duty cycle

softPwmWrite(LedPinGreen, 100 - g_val);

softPwmWrite(LedPinBlue, 100 - b_val);

}

int main(void)

{

int i;

if(wiringPiSetup() == -1){ //when initialize wiringPi failed, print message to screen

printf("setup wiringPi failed !\n");

return 1;

}

ledInit();

while(1){

for(i = 0; i < sizeof(colors)/sizeof(int); i++){

ledColorSet(colors[i]);

delay(500);

}

}

return 0;

}假設(shè)你想用Python語言實現(xiàn)RGB的控制,請看還有一篇博文【用樹莓派實現(xiàn)RGB

LED的顏色控制——Python版本號】

總結(jié)

以上是生活随笔為你收集整理的树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。