第六课:树莓派led控制

第一课:什么是树莓派
第二课:基于树莓派的10个经典项目
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派C语言编程手册
第六课:树莓派led控制
第七课:树莓派按键控制
第八课:树莓派PWM(脉宽调制)
第九课:树莓派数码管显示
第十课:树莓派如何读取温湿度传感器(dht11)数据
第十一课:树莓派控制电机
第十二课:树莓派搭建服务器
第十三课:树莓派搭建客户端
第十四课:树莓派+QT客户端
视频链接

从点灯开始

学一种语言是从hello,world开始的;
学一种硬件编程是从点灯开始的;
学编程语言,大家都从hello,world开始,是因为一个简单的hello,world其实是“五脏俱全”的,包括头文件,主函数,编译,运行,输出;
而控制一个cpu,从点一个灯(led)开始,也是这个道理,你的程序让一个灯亮起来了,说明cpu工作了,板子没问题了,你能够通过程序控制cpu的GPIO口了。
对一些玩过单片机或者arm的开发者来说,可能觉得点一个灯太easy,所以我考虑这篇博客是简单一笔带过,给一段代码,还是站在一个初学者的角度写得浅显易懂呢?最后,我觉得还是要认真写,一来如果简单转发一下别人的博客,不符合我博客的风格,另一个重要原因是:其实我很不喜欢那种蔑视入门知识的人,他们是忘了他们自己是如何走过来的,所以我还是站在一个从来没有接触过树莓派,也没有接触过单片机或者开发板的菜鸟角度来写吧!

一般用什么样的灯

我们一般用第一种灯,因为可以显示RGB(红绿蓝)三种颜色,而第二种灯只有单色(要么是白色,或者红色,蓝色,绿色等,下面图片是白色的)
第六课:树莓派led控制_第1张图片

怎么接线

这个RGB小模块,不需要接电源,因为Led只需要很小的电流就可以驱动,也就是通过一个树莓派上的IO口就可以驱动它,所以不需要接电源(也就是我们说的正),树莓派有很多个地线,这里的GND都是,GND是ground的缩写。Led模块上的R,G,B分别代表3个led,表示红,绿,蓝。我们一般用杜邦线来连线。
第六课:树莓派led控制_第2张图片

什么是IO,什么是GPIO

大家在学习硬件编程的时候,会在各种文章和书籍或者视频上看到**“IO口”“GPIO”**术语,其实很好理解:
IO——是input,output的首字母,表示cpu上引脚具备的两种功能,即你是想把这个引脚作为输入来使用呢?还是作为输出来使用,那么什么是输入,什么是输出呢?
输入和输出是针对cpu来说的,举个例子吧:
比如我们使用的笔记本,哪些是输入设备,哪些是输出设备呢?
很显然,键盘,鼠标是输入设备,显示器是输出设备,说到这个,大家很快就能回答出来,为什么呢,因为你觉得输入就是我们给到比较本的,键盘是用来输入字母和文字的,鼠标是用来点击一些按钮和网页的,这些属于输入概念;显示是输出设备,因为是笔记本里面的cpu把图片送到显示器显示的。所以呢:
输入设备是我们给到cpu的,输出设备是cpu给到我们的,这里的输入和输出是相对cpu来讲的,输入就是输入给cpu,输出是cpu输出给我们。
GPIO——是General Pin Input/Output的缩写,中间那个P也有人译作Purpose——用途,也有人译作port——端口。什么是通用呢,就是这个引脚是作为普通使用的,说明还有特殊用途,这个特殊用途我们后面学到pwm或者串口,i2c,spi的时候再讲。

开始编程了

led的编程时最简单了,就像helloworld一样。
但,这里也可以把问题拆分一下,你可以先写程序控制一个灯,一个灯实现了,再控制三个灯。
我们要控制一个IO口,需要下面的几步:
1)包含必要的头文件
#include //这是第一个要包含的,不然你不能调用控制IO口的函数
2) 设置编码模式
wiringPisetup();//设置wiringPi编码模式,c语言一般使用wiringPi编码模式,python一般使用BCM编码模式
//这些函数不知道什么意思的,可以参考我的另一篇博文:https://blog.csdn.net/qq_27320195/article/details/107167737
3)设置引脚功能
pinMode(27,OUTPUT); //设置wiringPi模式下的第27脚为输出功能
4) 循环控制
while (1)
{
digitalWrite(27,1);//亮
sleep(1);//延时1秒
digitalWrite(27,0);//灭
sleep(1);//延时1秒
}
最终代码:

pi@xiajiashan:~/pi-c-blog$ cat -n led.c 
     1  //第一步:包含头文件
     2  #include <wiringPi.h>
     3  int main()
     4  {
     
     5  //第二步:设置树莓派引脚编码模式
     6    wiringPiSetup();
     7  //第三步:定义引脚功能
     8    pinMode(27,OUTPUT);//设置引脚为输出
     9  //第四步:循环控制
    10    while(1){
     
    11      sleep(1);
    12      digitalWrite(27,1);//让灯亮
    13      sleep(1);
    14      digitalWrite(27,0);//灯灭
    15    }
    16    return 0;
    17  }
pi@xiajiashan:~/pi-c-blog$ 

编译运行:

编译运行很简单,但是一定要带上库-lwiringPi,就像这样:
在这里插入图片描述

如何让你的程序变得更好点

这里有一个函数,我们调用的时候没有去判断它的返回值,这是一个不好的习惯,不然出错了,不知错在哪里。
就是wiringPiSetup()这个函数,正确的做法是这样:
6 //第二步:设置树莓派引脚编码模式
7 if(wiringPiSetup()<0)
8 {
9 perror(“树莓派启动失败…”);
10 exit(-1);
11 }
但是因为增加了perror和exit函数,所以编译的时候,会出现下面的问题:
pi@xiajiashan:~/pi-c-blog$ gcc led.c -lwiringPi
led.c: In function ‘main’:
led.c:9:6: warning: incompatible implicit declaration of built-in function ‘exit’
exit(-1);
^
pi@xiajiashan:~/pi-c-blog$
关于exit函数的工作原理,大家参考这篇博文:
https://blog.csdn.net/firefly_2002/article/details/7960595
解决这个问题的方法,就是在头文件中添加include
最终的代码如下:

pi@xiajiashan:~/pi-c-blog$ cat -n led.c 
     1  //第一步:包含头文件
     2  #include <wiringPi.h>
     3  #include <stdlib.h>  //调用exit函数需要
     4  int main()
     5  {
     
     6  //第二步:设置树莓派引脚编码模式
     7    if(wiringPiSetup()<0)
     8    {
     
     9       perror("树莓派启动失败....");
    10       exit(-1);
    11    }
    12  //第三步:定义引脚功能
    13    pinMode(27,OUTPUT);//设置引脚为输出
    14  //第四步:循环控制
    15    while(1){
     
    16      sleep(1);
    17      digitalWrite(27,1);//让灯亮
    18      sleep(1);
    19      digitalWrite(27,0);//灯灭
    20    }
    21    return 0;
    22  }
pi@xiajiashan:~/pi-c-blog$ 

三色灯RGB的控制

上面我们实现的是红色灯的控制,如果要实现三个灯的交替亮灭,该怎么办呢?
就是R亮------>R灭------>G亮-------->G灭-------->B亮-------->B灭------>循环
因为硬件原理我已经讲得很详细了,所以接下来就是编码问题,我就直接贴代码了:

pi@xiajiashan:~/pi-c-blog$ cat rgb.c -n
     1  //第一步:包含头文件
     2  #include <wiringPi.h>
     3  #include <stdlib.h>  //调用exit函数需要
     4  #define R    27
     5  #define G    28
     6  #define B    29
     7
     8  int main()
     9  {
     
    10  //第二步:设置树莓派引脚编码模式
    11    if(wiringPiSetup()<0)
    12    {
     
    13       perror("树莓派启动失败....");
    14       exit(-1);
    15    }
    16  //第三步:定义引脚功能
    17    pinMode(R,OUTPUT);//设置R引脚为输出
    18    pinMode(G,OUTPUT);//设置G引脚为输出
    19    pinMode(B,OUTPUT);//设置B引脚为输出
    20  //第四步:循环控制
    21    while(1){
     
    22      //R
    23      digitalWrite(R,1);//让灯亮
    24      sleep(1);
    25      digitalWrite(R,0);//灯灭
    26      sleep(1);
    27      //G
    28      digitalWrite(G,1);//让灯亮
    29      sleep(1);
    30      digitalWrite(G,0);//灯灭
    31      sleep(1);
    32      //B
    33      digitalWrite(B,1);//让灯亮
    34      sleep(1);
    35      digitalWrite(B,0);//灯灭
    36      sleep(1);
    37    }
    38    return 0;
    39  }
pi@xiajiashan:~/pi-c-blog$ 

七彩灯的控制

因为如何控制灯的硬件原理我已经讲了,七彩灯我这里只讲一下控制原理,详细的大家可以购买我的视频:
https://edu.csdn.net/course/play/28051/383653?spm=1002.2001.3001.4143
RGB三种颜色可以组合成8种颜色,R,G,B,RG-,RB-,-GB,RGB,—。---表示不亮了。
注意是组合,不是排列,排列abcd和abdc是不一样的,但是组合是一样的。

END

希望对您有帮助,如果有帮助就收藏吧

第一课:什么是树莓派
第二课:基于树莓派的10个经典项目
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派C语言编程手册
第六课:树莓派led控制
第七课:树莓派按键控制
第八课:树莓派PWM(脉宽调制)
第九课:树莓派数码管显示
第十课:树莓派如何读取温湿度传感器(dht11)数据
第十一课:树莓派控制电机
第十二课:树莓派搭建服务器
第十三课:树莓派搭建客户端
第十四课:树莓派+QT客户端
视频链接

你可能感兴趣的:(树莓派C语言开发,树莓派led控制,树莓派RGB灯控制,树莓派三色灯控制,树莓派七彩灯控制,树莓派IO口控制)