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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【树莓派C语言开发】实验02:RGB小灯 -> 正文阅读

[C++知识库]【树莓派C语言开发】实验02:RGB小灯

前言

又到了树莓派学习的时候!

关注本专栏,和我一起学习树莓派开发板30+经典实验
点我关注

image-20220402231813297

上一次的实验001-双色LED中,虽然我把博客展示了出来,写的好像有模有样的,实际上我对一些函数可谓是丝毫不懂。

但这次不一样了,我把一些函数的基本使用给整明白了!

1.实验器材

  • 树莓派开发板
  • 40p软排线+T型转接板
  • 跳线一堆
  • RGB小灯

通过这次试验,我们可以基本了解一下让电脑性能提升200%的RGB的底层控制

image-20220331225539755

1.1树莓派运行库准备

当树莓派需要与外部元件相接时,要用到一些写好的库。如树莓派wiringPi库


2.元件接线

RGBled模块的电路图如下,其与实物图是对应关系

2.RGB-LED灯模块原理图

IMG_20220401_170249

以下是本次实验的接线图

02_RGB_LED_bb

其实这里我没搞懂这个5V是用来干什么的,因为不接好像也没有关系

让我无语的是,去问店家,客服回复是“原理需要自己学习”

看来还是得靠自己

大胆猜测一下,后续的实验需要更多接5V的设备,这个5V引线就好比我们每次编写C语言都需要用stdio.h一样,是一个习惯。

同时解释一下面包板左右两条线的作用:

  • 当你把GND用引线接到蓝色-线上,此时那一排都是GND
  • 当你把5V用引线接到红色+上,红色一排都是5V了

这就相当于串联线路

IMG_20220331_232946

IMG_20220331_232744

3.函数解释

这里需要用到两个函数: softPwmCreatesoftPwmWrite

上篇博客中我只给出了这两个函数的解释文档(偷懒),这篇博客让我们来真切认识一下这两个函数的作用


以下是函数原型,以及官方解释的翻译

int softPwmCreate (int pin, int initialValue, int pwmRange) ;

这将创建一个软件控制的PWM引脚。您可以使用任何GPIO引脚,引脚编号将与您使用的wiringPiSetup()函数相同。

initialValue是初始值,如果pwmRange使用100,那么给定引脚的值可以是0(关闭)到100(完全打开)之间的任何值。 返回值为0表示成功,-1代表失败。

如果还有其他情况,您应该检查全局errno变量,看看哪里出了问题。

void softPwmWrite (int pin, int value) ;

更新给定引脚pin上的PWM值。该值将被检查是否在范围pwmRange

未通过softPwmCreate初始化的管脚将被忽略

后续还有一个Note:

image-20220401152213011

  • PWM输出的每个“周期”需要10毫秒,默认范围值为100,因此尝试每秒更改PWM值超过100次将是徒劳的

  • softPWM模式下激活的每个引脚使用大约0.5%的CPU

  • 目前无法在程序运行时禁用引脚上的softPWM

  • 您需要保持程序运行以保持PWM输出!

3.1关于softPwmWrite的使用问题,大大的疑惑

这里我产生了一个巨大的疑惑,就是softPwmWrite函数的第二个参数究竟应该如何使用

这个问题我在CSDN的问答区提问了,22.04.01的17:00目前还没有回复👉点我

可以看到下面这位大佬的程序中,是将第二个参数设置到超过了100

引用自博客https://www.cnblogs.com/demo-lv/p/14017488.html

image-20220401155259035

而参考资料中,提供的代码也是将pwm值设置超过了100

image-20220401162159482

在查询过一些资料(是真的没有博客提到过这个问题),我找到了RGB颜色对照表

这个代码中提供的参数设置,其实是参照RGB表来设置的

image-20220401161940549

image-20220401162016625

也就是说,如果想达到混色的效果,你需要利用softPwmWrite函数将红绿蓝针脚与RGB表中的数值对应进行输出。

但这不就和官方的pwm值应该在范围内,且超过100的pwm值都是无效的,冲突了吗?

QQ图片20220401165426

这个问题先暂时放在这里,蹲一个大佬解释


4.代码样例

4.1初始化针脚

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

#define makerobo_Led_PinRed    0 // 红色LED 管脚
#define makerobo_Led_PinGreen  1 // 绿色LED 管脚
#define makerobo_Led_PinBlue   2 // 蓝色LED 管脚

// LED 初始化
void makerobo_led_Init()
{//第三个参数是range,将pwm设置成100(全开)
	softPwmCreate(makerobo_Led_PinRed,  0, 100);
	softPwmCreate(makerobo_Led_PinGreen,0, 100);
	softPwmCreate(makerobo_Led_PinBlue, 0, 100);
}

你可能会想,为什么这里要把红绿蓝的管脚设置成0、1、2,实际上这里和面包板的接线是对应的

image-20220401152419702

可以看到,GPIO 0/1/2分别对应的是17/18/27,同我们第2点中接线图上的针脚位置对应


4.2颜色参数设置

初始化针脚之后,我们就来设置各个针脚的参数

// LED 颜色设置
void makerobo_led_Color_Set(uchar r_val, uchar g_val, uchar b_val)
{//对应不同颜色针脚的设置,如果需要红色,就只给红色r_val传对应值
 //给不同颜色输入不同值,达成混色的效果!
	softPwmWrite(makerobo_Led_PinRed,   r_val);
	softPwmWrite(makerobo_Led_PinGreen, g_val);
	softPwmWrite(makerobo_Led_PinBlue,  b_val);
}

//函数使用如下
makerobo_led_Color_Set(0xff,0x00,0x00);   //红色	
delay(500);   //延时500ms,使更改便于观察
makerobo_led_Color_Set(0x00,0xff,0x00);   //绿色
delay(500);                
makerobo_led_Color_Set(0x00,0x00,0xff);   //蓝色
delay(500);

4.3完整代码及效果演示

下面给出完整代码,以及最终的效果、

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

#define uchar unsigned char

#define makerobo_Led_PinRed    0 // 红色LED 管脚
#define makerobo_Led_PinGreen  1 // 绿色LED 管脚
#define makerobo_Led_PinBlue   2 // 蓝色LED 管脚

// LED 初始化
void makerobo_led_Init()
{//第三个参数是range,将pwm设置成100(全开)
	softPwmCreate(makerobo_Led_PinRed,  0, 100);
	softPwmCreate(makerobo_Led_PinGreen,0, 100);
	softPwmCreate(makerobo_Led_PinBlue, 0, 100);
}
// LED 颜色设置
void makerobo_led_Color_Set(uchar r_val, uchar g_val, uchar b_val)
{//对应不同颜色针脚的设置,如果需要红色,就只给红色r_val传对应值
 //给不同颜色输入不同值,达成混色的效果!
	softPwmWrite(makerobo_Led_PinRed,   r_val);
	softPwmWrite(makerobo_Led_PinGreen, g_val);
	softPwmWrite(makerobo_Led_PinBlue,  b_val);
}


int main()
{
    //初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup() == -1){
		printf("setup wiringPi failed !");
		return 1; 
	}
	makerobo_led_Init();
	
	int n=0;
	printf("请输入循环周期的次数>");
	scanf("%d",&n);//输入循环周期的次数
	while(n--)
	{
		makerobo_led_Color_Set(0xff,0x00,0x00);   //红色	
		delay(500);   //延时500ms,使更改便于观察
		makerobo_led_Color_Set(0x00,0xff,0x00);   //绿色
		delay(500);                   
		makerobo_led_Color_Set(0x00,0x00,0xff);   //蓝色
		delay(500);

		makerobo_led_Color_Set(0xff,0xff,0x00);   //黄色
		delay(500);                 
		makerobo_led_Color_Set(0xff,0x00,0xff);   //粉色
		delay(500);     
		makerobo_led_Color_Set(0xff,0xff,0xff);   //白色
		delay(500);       

		makerobo_led_Color_Set(0x94,0x00,0xd3);   //紫色
		delay(500);
		makerobo_led_Color_Set(0x76,0xee,0x00);   //偏黄色
		delay(500);
		makerobo_led_Color_Set(0x00,0xc5,0xcd);	  //淡蓝色
		delay(500);
	}
	
	//最后循环结束时,关闭LED(如果不这么设置,LED灯会停留在最后一个颜色)
	makerobo_led_Color_Set(0x00,0x00,0x00);	//参数都为0,相当于关灯
	delay(500);//如果不延时,效果无法展示出来
	
	return 0;
}

使用树莓派Geany编译器,三板斧点起来

image-20220401163706498

最后的结果如下图~~RGB小灯变色循环成功!

Screenshot_2022_0331_220207


4.4 Linux-GCC编译器指令

Geany已经可以很好地执行我们的程序了,但它未免有点太easy了,点几下按钮就能搞定

我们来试试需要敲语句的GCC编译器

首先依旧是用cd打开源文件的目录

cd 打开源文件存放的目录
ls 列出当前文件路径下的所有文件

使用wiringPi库和softPWM库需要加上两个指令

  • wiringPi库对应:-lwiringPi
  • softPWM库对应:-lpthread

在linux的gcc中使用delay函数需要调用另外一个头文件<unistd.h>

gcc -Wall 02rgbled.c -o TEST -lwiringPi -lpthread

如果没有报错的话,那就是编译成功了,再次ls可以看到多出来了一个TEST可执行文件

image-20220401164314534

./TEST 执行TEST文件

可以看到程序正常运行了!

image-20220401164420318


结语

第二个树莓派实验也做完啦!

虽然还有问题没有解决,但我还是很开心的

如果对你有帮助,还请点个大大的👍!有什么问题可以评论区提出来哦

通往大佬的路非常漫长……

QQ图片20220401165548

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:52:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:40:55-

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