IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> RGB(三色)灯配置常用颜色数据,用法讲解,基于C语言的程序讲解,七彩渐变程序讲解 -> 正文阅读

[嵌入式]RGB(三色)灯配置常用颜色数据,用法讲解,基于C语言的程序讲解,七彩渐变程序讲解

?????本人新手,此讲解适合新手朋友,大神不喜勿喷。通过实际测试过的,请放心消化。

1:灯的计数配置如下:

?2:七色在模拟PWM程序中的配置,原理:在一个周期中? ? ? 灯亮的时长 /?周期时长? =? 占空比 ,此程序是通过占空比来调节各个灯的亮度,上表的配置参数为三种灯的比例参数,按照此参数配置为最亮。所以在配置橙的灯时,红色灯整个周期都亮,绿色灯只亮周期的一半时长。

七彩渐变是每一种灯由暗变亮,在由亮变暗,然后在切换到另一种灯光的最暗状态继续循环。

代码如下:

/******************************************************************
************************RGB灯使用**********************************
******************************************************************/
bool rgb_over = true;		//翻转标志
bool is_qcding = false;		//控制灯是否开启
uint8_t rgb_colour = 0;		//八种灯色0-7分别对应:白,红,绿,蓝,橙,黄,青,紫
uint8_t duty_num_b = 10;	//灯光亮度(0-255)

/************脚位说明*****************
LEDR_GPIO	  红色灯控制脚位
LEDG_GPIO	  绿色灯控制脚位
LEDB_GPIO	  蓝色灯控制脚位
*************************************/

void _close_all_led(){		//关闭所有灯光	
	user_gpio_set_value(LEDR_GPIO, LEDRGB_CLOSE);	
	user_gpio_set_value(LEDG_GPIO, LEDRGB_CLOSE);	
	user_gpio_set_value(LEDB_GPIO, LEDRGB_CLOSE);		
}

//此函数在定时器中断中使用,每隔100us进入一次
void _RGB_timer_shade(){		//七彩渐变函数
	if(rgb_over){	//暗->亮
		duty_num_b += 4;
		if(duty_num_b > 251){
			rgb_over = false;
			duty_num_b = 255;
		}
	}else{			//亮->暗
		duty_num_b -= 4;
		if(duty_num_b < 10){
			rgb_over = true;
			duty_num_b = 10;
			rgb_colour++;
			if(rgb_colour > 7){
				rgb_colour = 1;
			}
		}
	}
}


//此函数可在定时器中断中使用,也可在循环函数中使用,每隔25us进入一次
void _RGB_timer_handle( ){		//单独开启某种灯色的灯光,灯色由rgb_colour控制
	static uint8_t count = 0;			//计数范围0-255,每隔25us此变量加1
	uint8_t dutynum = 255;				//临时亮度值
	
	dutynum = duty_num_b;		//亮度赋值
	if(is_qcding){
		if(rgb_colour < 8){						//rgb_colour灯色
			//橙色灯和紫色灯由于单个灯的配置比例不同,所以单独配置
			if(rgb_colour == 4){			//橙
				if(count <= dutynum){
					user_gpio_set_value(LEDR_GPIO,LEDRGB_OPEN);	//红的灯配置亮
				}else{
					user_gpio_set_value(LEDR_GPIO,LEDRGB_CLOSE);//红的灯配置灭
				}
				if(count <= (dutynum/2)){	//绿的灯的亮度为红色灯的一半
					user_gpio_set_value(LEDG_GPIO,LEDRGB_OPEN);
				}else{
					user_gpio_set_value(LEDG_GPIO,LEDRGB_CLOSE);
				}
				user_gpio_set_value(LEDB_GPIO,LEDRGB_CLOSE);
			}else if(rgb_colour == 7){		//紫
				if(count <= (dutynum/2)){	//红色灯的亮度为蓝色灯的一半
					user_gpio_set_value(LEDR_GPIO,LEDRGB_OPEN);
				}else{
					user_gpio_set_value(LEDR_GPIO,LEDRGB_CLOSE);
				}
				if(count <= dutynum){
					user_gpio_set_value(LEDB_GPIO,LEDRGB_OPEN);
				}else{
					user_gpio_set_value(LEDB_GPIO,LEDRGB_CLOSE);
				}
				user_gpio_set_value(LEDG_GPIO,LEDRGB_CLOSE);
			}else{
				if(count <= dutynum){
					switch(rgb_colour) {
						case 0:{	//白
							user_gpio_set_value(LEDR_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDG_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDB_GPIO,LEDRGB_OPEN);
							break;
						}
						case 1:{	//红
							user_gpio_set_value(LEDR_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDG_GPIO,LEDRGB_CLOSE);
							user_gpio_set_value(LEDB_GPIO,LEDRGB_CLOSE);
							break;
						}
						case 2:{	//绿
							user_gpio_set_value(LEDG_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDR_GPIO,LEDRGB_CLOSE);
							user_gpio_set_value(LEDB_GPIO,LEDRGB_CLOSE);
							break;      
						}               
						case 3:{	//蓝
							user_gpio_set_value(LEDB_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDR_GPIO,LEDRGB_CLOSE);
							user_gpio_set_value(LEDG_GPIO,LEDRGB_CLOSE);
							break;      
						}                   
						case 5:{	//黄
							user_gpio_set_value(LEDR_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDG_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDB_GPIO,LEDRGB_CLOSE);
							break;      
						}               
						case 6:{	//青
							user_gpio_set_value(LEDG_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDB_GPIO,LEDRGB_OPEN);
							user_gpio_set_value(LEDR_GPIO,LEDRGB_CLOSE);
							break;      
						}               
					}
				}else{
					_close_all_led();		//关闭所有灯光
				}
			}
			count++;
			if(count >= 255){	//一个周期结束,配置为0进行下一个周期
				count = 0; 
			}
		}else{
			count = 0;
			rgb_colour = 0;
		}
	}else{
		_close_all_led();		//关闭所有灯光
	}
}

?????????????????????????????????????????????????????????????????????????????????看完有帮助的话记得点个赞哈,制作不易啊

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:17:11  更:2021-11-25 08:17:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 4:57:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码