文章目录
- 前言
- 1.实验器材
-
- 1.准备树莓派运行库
- 2.元件接线
- 3.函数解释
-
- 3.1关于softPwmWrite使用问题,极大的疑惑
- 4.代码样例
-
- 4.1初始化针脚
- 4.设置2色参数
- 4.33完整代码和效果演示
- 4.4 Linux-GCC编译器指令
- 结语
前言
是时候学习树莓派了!
还在等什么?心不如行动!点我注意
本专栏代码仓库:Raspberry-practice
上次实验001-双色LED中,虽然我把博客展示了出来,写的好像有模有样的,实际上我对一些函数可谓是丝毫不懂。
但这次不一样了。我已经理解了一些函数的基本使用!
1.实验器材
- 树莓派开发板
- 40p软排线 T型转接板
- 跳线一堆
- RGB小灯
通过这个实验,我们可以基本了解它的底层控制
1.准备树莓派运行库
当树莓派需要与外部元件连接时,应使用一些书写库。
树莓派
wiringPi
库:下载/安装教程下载
softPwm.h
库:GitHub链接,安装教程见
2.元件接线
RGBled模块的电路图如下,与实物图对应
以下是本实验接线图
其实这里我不明白这个5V它是用来做什么的,
让我哑口无言的是,问店主,客服回复是原则需要自己学习
看来还是要靠自己
大胆猜测后续实验需要更多的5V设备,这5V就像我们每次都需要用C语言一样stdio.h
同样,这是一种习惯。
同时解释面包板左右两条线的作用:
- 当你把GND用引线接到蓝色-线上,这个时候那排都是GND
- 当你把5V用引线接到红色 上面,红排是5V了
这就相当于
3.函数解释
这里需要两个函数: softPwmCreate
和softPwmWrite
在最后一个博客中,我只给出了这两个函数的解释文档(懒惰)。让我们真正了解这两个函数的作用
以下是函数原型,以及官方解释的翻译
int softPwmCreate (int pin, int initialValue, int pwmRange) ;
这将创建软件控制PWM引脚。你可以用任何东西。GPIO引脚,引脚号将与您使用wiringPiSetup()
函数相同。
initialValue
如果是初始值pwmRange
如果使用100,给定引脚的值可以是0(关闭)到100(完全打开)之间的任何值。 ,-1代表失败。
如有其他情况,应检查全局errno
变量,看看哪里出了问题。
void softPwmWrite (int pin, int value) ;
更新给定引脚pin
上的PWM值。值将被检查是否在范围内pwmRange
内
后续还有一个Note:
PWM每个输出周期需要10毫秒,默认范围值为100,所以试着每秒更改一次PWM超过100次将是徒劳的
在
softPWM
激活模式下的每个引脚约为0.5%的CPU目前,在程序运行过程中不能禁止引脚
softPWM
您需要保持程序运行PWM输出!
3.1关于softPwmWrite使用问题,极大的疑惑
这里我有一个很大的疑惑,那就是softPwmWrite
函数的第二个参数应该如何使用?
我在这个问题CSDN问答区提问,22.04.目前0117:00还没有回复。
你可以看到,在下面的大人物程序中,第二个参数设置在100多个
引用自博客https://www.cnblogs.com/demo-lv/p/14017488.html
在参考资料中,提供的代码也将是pwm超过100的值设置
在查询了一些信息(博客真的没有提到这个问题)后,我找到了它RGB颜色对照表
该代码中提供的参数设置实际上是来设置的
换句话说,如果你想达到混色效果,你需要使用它softPwmWrite
函数将针脚与RGB输出表中的值。
但这不就和,突了吗?
这个问题先暂时放在这里,蹲一个大佬解释
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,实际上这里和面包板的接线是对应的
可以看到,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编译器,三板斧点起来
最后的结果如下图~~RGB小灯变色循环成功!
4.4 Linux-GCC编译器指令
Geany已经可以很好地执行我们的程序了,但它未免有点太easy了,点几下按钮就能搞定
我们来试试需要
首先依旧是用cd
打开源文件的目录
cd 打开源文件存放的目录
ls 列出当前文件路径下的所有文件
使用wiringPi库和softPWM库需要加上两个指令
- wiringPi库对应:
-lwiringPi
- softPWM库对应:
-lpthread
在linux的gcc中使用需要调用另外一个头文件<unistd.h>
gcc -Wall 02rgbled.c -o TEST -lwiringPi -lpthread
如果没有报错的话,那就是编译成功了,再次ls
可以看到多出来了一个TEST可执行文件
./TEST 执行TEST文件
可以看到程序正常运行了!
结语
第二个树莓派实验也做完啦!
虽然还有问题没有解决,但我还是
如果对你有帮助,还请点个大大的👍!有什么问题可以评论区提出来哦
通往大佬的路非常漫长……