锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【树莓派C语言开发】实验01:双色LED

时间:2022-08-18 04:30:00 面板led连接器dcled连接器dc

文章目录

  • 前言
  • 1.实验器材
  • 2.实验原理
  • 3.控制代码
    • 3.1显示器的PWM调光和DC调光
    • 3.2 编译代码
      • 3.2.1直接使用Geany编译器内部选项
      • 3.2.2 使用linux语言
  • 4.如何在使用面包板的同时使用散热风扇
  • 结语

前言

今晚什么都没发生(其实作业还没写完),开始折腾树莓派

我买的是树莓派4B(4GB)版本的套件,东西还是很全的,店家还发了一整套学习资料 指导视频,加上一本好书。

让我们一起完成这个博客的第一个实验:双色LED

学习资料来源:湖南创乐博智能科技有限公司

本博客仅供参考,请勿转载!


1.实验器材


2.实验原理

将引脚S(绿色)与中间管脚(红色)连接到面包板的接口上,编程控制覆盆子派,使之LED颜色由红变绿。PWM混合成其它颜色。

IMG_20220328_191824

对应接线表

树莓派 T型转接板 双色LED
GPI01 GPI018 S
GPI00 GPI017 R
GND GND GND

实际接线图如下(手机画质太渣)

3.控制代码

当树莓派需要与外部元件连接时,应使用一些书写库。树莓派wiringPi库

树莓派wiringPi库:wiringPi是一个很棒的树莓派IOC语言开发提供了丰富的接口:GPIO控制、中断、多线程等

还有softPwm.h库:GitHub链接


本次双色LED这两个库需要用于实验,以及C语言自带的库函数stdio.h

代码如下:

#include  #include  #include   #define uchar unsigned char  #define makerobo_Led_PinRed 0 // 红色LED 管脚 #define makerobo_Led_PinGreen 1 // 绿色LED 管脚  // LED 初始化 void makerobo_led_Init(void) { 
          softPwmCreate(makerobo_Led_PinRed,  0, 100);  softPwmCreate(makerobo_Led_PinGreen,0, 100); } // 设置LED 亮度PWM调节范围是0x00-0xff void (uchar r_val, uchar g_val)
{ 
        
	softPwmWrite(makerobo_Led_PinRed,   r_val);
	softPwmWrite(makerobo_Led_PinGreen, g_val);
}

int main()
{ 
        
    //初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup() == -1){ 
         
		printf("setup wiringPi failed !");
		return 1; 
	}

	makerobo_led_Init(); // LED 初始化

	while(1){ 
        
		makerobo_led_ColorSet(0xff,0x00);   //红色 
		delay(500);                         //延时500ms
		makerobo_led_ColorSet(0x00,0xff);   //绿色
		delay(500);
		makerobo_led_ColorSet(0xff,0x45);	
		delay(500);
		makerobo_led_ColorSet(0xff,0xff);	
		delay(500);
		makerobo_led_ColorSet(0x7c,0xfc);	
		delay(500);
	}
	return 0;
}

在wiringPi库中,可以看到两个函数的使用说明

  • Create函数相当于初始化针脚
  • Write函数会更改该管脚的pwm值,以达到控制LED亮度的目的

3.1显示器的PWM调光和DC调光

如果你有了解过显示器的选购知识,估计听说过显示器的PWM调光和DC调光。

使用DC调光的显示器,屏幕背光将常亮;使用PWM调光的显示器,屏幕背光将高速开关来点亮屏幕。只要PWM高于一定值,人眼就分辨不出该屏幕的闪烁。当一块显示器使用高频PWM调光时,我们认为它与DC调光没有太大的区别。

但总的来说,使用DC调光技术的显示器更加“护眼”,而使用低频PWM调光的显示器就是极度辣眼睛(这也是有些屏幕在摄像头中会屏闪的原因)

目前主流手机都上了OLED屏幕,该屏幕材质普遍使用的是PWM调光。部分手机厂家在屏幕设置中推出了“类DC调光选项”,其原理就是用高频PWM来模拟DC调光

如果你想了解这方面的知识,可以看看这个视频👉链接

好像bb了一些和这个实验没啥关系的内容,赶快回到正题!

3.2 编译代码

树莓派中有两种方式编译运行我们的代码

3.2.1直接使用Geany编译器内部选项

3.2.2 使用linux语言

树莓派的系统是基于linux的,我们可以使用linux中的gcc语言来编译这个.c文件

在本专栏之前的博客中,有介绍过这种方式👉链接

输入指令,你会发现系统报错显示delay函数未定义

undefined reference to `delay`

这是因为delay函数并不是一个C语言的库函数我,我们可以在前面自己整一个delay函数的原型

第一次使用Geany编译的时候并没有报错,这是因为在Geany里面已经用生成命令引用了wiringPi库

在Geany的build(生成)-->set build commands(设置生成命令)中输入以下指令
gcc -Wall -c "%f" -lwiringPi
// 延时z毫秒的delay函数
void delay(unsigned int z)
{ 
        
    unsigned int i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--)
            ;//利用无意义的for循环来进行延时
}

我们在linux控制台中用cd打开文件路径后,输入如下指令

1. gcc 01DuoColorLED.c -o GPIO -lwiringPi
2. -lwiringPi选项,链接WiringPi库。

第一条指令是编译程序,生成可执行文件GPIO

使用./GPIO指令来执行此文件

  • 需要注意的是,用这种方法运行程序不太方便终止,你可以去掉main函数中的while循环,让变色只执行一次。

所以在进行此类开发时,建议直接使用Geany编译器,因为它会生成一个前台控制面板,我们可以直接用ctrl+c停止程序

奇怪的是,当我运行第一个Geany编译器生成的可执行文件时,LED会正常变色。

但是运行第二个在linux控制台生成的GPIO文件时,却不能变色。不知道是什么原因

而当我重新用Geany编译器编译这份加了delay函数定义的代码时,发现这个delay函数还是不太行啊!这灯都闪的飞快,真的有500ms吗

不过这也不算什么大问题,咱们可以通过调整delay函数的定义,和调用参数来控制

4.如何在使用面包板的同时使用散热小风扇

原本不使用面包板的时候,小风扇可以插在板载针脚的2、3位

但是现在使用了面包板,这整个针脚都被占用了,风扇往哪里插呢?

很简单,使用两根跳线,将风扇与面包板上的5v和GND链接就行了!

  • 红线接5V
  • 黑线接GND


结语

不管如何,这次实验算是完美完成啦!

这也是我在树莓派上做的第一个实验

如果你想和我一起学习树莓派,那就关注本专栏吧!

欢迎star本专栏代码仓库:GITEE链接

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章