用树莓派实现RGB LED的颜色控制

用树莓派实现RGB LED的颜色控制 

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)绿(G)蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代
表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,从而得到各种各样的颜色。

在实际的控制中,往往通过PWM来实现LED亮度(颜色深度)的控制。

树莓派只有一路硬件PWM输出(GPIO1),可是要实现RGB
LED的控制,需要3路PWM。其实,wiringPi库为我们提供了用软件多线程实现的PWM输出,我们可以利用这个库提供的函数很方便的将任意GPIO配置为PWM输出。在本例中,我将GPIO0,GPIO1,GPIO2配置成了soft
PWM
输出。树莓派的引脚分配表如下图所示:

我用的RGB LED是共阴极的,与树莓派的连接方式如下:

Raspberry Pi                 RGB LED module

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

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

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

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

实物图如下:

源代码:

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>

#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

运行代码:

./rgb

注意:

1,-lwiringPi选项:指明了要链接到wiringpi库,因为softPwm的实现就在此库;

2,-lpthread选项:因为softPwm的实现用了Linux的多线程机制,所以加这个编译选项。

代码和演示视频已分享到360云盘:

点我下载代码      访问密码e0da

点我下载视频      访问密码d6b1

用树莓派实现RGB LED的颜色控制

时间: 2024-10-15 14:54:01

用树莓派实现RGB LED的颜色控制的相关文章

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

用树莓派实现RGB LED的颜色控制  RGB色彩模式是工业界的一种颜色标准.是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红.绿.蓝三个通道的颜色.这个标准差点儿包含了人类视力所能感知的全部颜色,是眼下运用最广的颜色系统之中的一个.RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值. RGB图像仅仅使用三种颜色.就能够使它们依照不同的比例混合,从而得到各种各样的颜色. 在实际的控制中.往

用树莓派实现RGB LED的颜色控制——Python版本

电路连接方式请参考另一篇博文:[用树莓派实现RGB LED的颜色控制--C语言版本] Python代码: #!/usr/bin/env python #********************************************************* # File Name :rgb.py # Author :Jason Dai # Date : 2015/02/04 #*******************************************************

共阳极RGB LED二极管

1)RGB LED二极管有四个引脚,它把3个普通led被封装在其内部,这三个led颜色分别为红.绿.蓝三种颜色,通过控制各个LED的亮度,你可以混合出几乎任何你想要的颜色,如下图: 2)RGB LED也分共阴极和共阳极. 共阴极:把所有负极端全部接一块接负极,即公共端为负极. 共阳极:把所有正极端全部接一块接正极,即公共端为正极. 3)共阳极RGB LED  : R.G.B这三个脚分别引出接负极,这三脚之外的第四脚为公共端接正极(阳极).如下图: 由图可看出共阳RGB LED共有4个引脚,常见的

MATLAB画图surf函数颜色控制参数c用法

专业今年开了MATLAB的课程(土木工程学MATLAB?),老师给出了保过题,为了不挂科也是苦逼百度+谷歌了半天,加上自己的琢磨,总算是明白些surf颜色控制方法了,在这里分享记录一下~初学matlab,理解的不是太深,望海涵. 题目 从excel中读取粒子,这些粒子具有三维的坐标,xyz,并且具有三维的速度,excel中的每一页内存储一个时间点的例子信息,x,y,z,vx,vy,vz,页的命名为sheet+i,希望能够先读取粒子信息到向量当中,然后粒子的位置进行图像显示,粒子采用球体进行显示,

HTML连载15-文本属性&amp;颜色控制属性

一.文本装饰的属性 1.格式:text-decoration:underline; 2.取值: (1)underline代表下划线 (2)line-through代表删除线 (3)overline代表上划线 (4)none代表什么格式都没有(默认是这个属性) 注意:none的大多数用处在我们使用a标签的时候,可以用来去掉超级连接的下划线,可见下方演示 <head> <meta charset="UTF-8"> <title>Title</tit

STM32F1-workarea : how to drive a WS2812 RGB LED using PWM and DMA

how to drive a WS2812 RGB LED using PWM and DMA #include <stm32f10x.h> void Delay(__IO uint32_t nCount) { while(nCount--) { } } #define TIM3_CCR1_Address 0x40000434 // physical memory address of Timer 3 CCR1 register #define d2r (3.14159265/180) TIM

锐浪 报表, 当多行交叉报表时,对多行交叉报表中自由格中的多个字段控件,进行颜色控制. 取值 判断等实现

需要注意的点是: 1 . 要对自由格中对应的 字段框的背景填充方式改为:填充,否则没有效果. 2 . 代码中红色部门代码: Column 为明细网络对象属性中的 列集合 中的 交叉列的 名称,  Report.RunningDetailGrid.Columns.Item("Column_2") 3.  蓝色部门 为自由格中 控件的索引位置 ,也可以根据字段框的名称来进行控制如:  contentCell.Controls.Item("FieldBox8") 代码如下

Silverlight DataGrid数据行背景颜色控制

sdk:DataGrid数据绑定后,部分特殊的行需要用不同的背景颜色来显示.(注册DataGrid的LoadingRow事件) 1 private void radGridView_LoadingRow(object sender, DataGridRowEventArgs e) 2 { 3 4 //获取当前加载的行标(从0开始) 5 int i = e.Row.GetIndex(); 6 7 //获取DataGrid绑定的数据集合 8 ObservableCollection<CntrMstM

树莓派点亮LED灯需要几行代码?3行。小孩子都能学会

目录 点亮LED灯 硬件连接 代码 闪烁的LED灯 呼吸灯 其他 点亮LED灯 硬件连接 找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进教材了. 代码 我们先来看图形化的版本: from gpiozero import LED led = LED(17) led.on() 是的你没有看错,树莓派点亮LED只需要3行代码.只需要像Python的turtle编程一样导入需要用到的LED类,然后生成一个表示连接在17号GPIO引脚的LED