欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树莓派Qt开发入门(一):流水灯实验——GPIO的使用

程序员文章站 2024-02-26 09:35:16
...

前言

配置好Qt开发环境后,我们就可以进行树莓派的C++开发了。本次我们利用树莓派的GPIO,控制8位LED模块,完成流水灯的控制。
这也是树莓派类似于单片机的一种控制方法,如果你对单片机不陌生的话,相信你很快就可以上手。

基础知识

树莓派GPIO

树莓派 3B+开发板上有 40 个 GPIO 接口,如图所示。
树莓派Qt开发入门(一):流水灯实验——GPIO的使用
GPIO(General Purpose Input/Output)的意思就是通用型输入输出,可以使用第三方库wiringPi进行控制,支持wiringPi Pin和BCM GPIO两种编号。

WiringPi库

当你完成系统和Qt的安装后,第三方的wiringPi库就应该已经安装完成了。或者你可以在终端输入:

sudo apt-get install wiringpi

来进行安装。安装完毕后,可以输入以下指令查看版本号和读取io状态:

gpio -v
gpio readall

之后我们能够在终端中看到如下图所示的GPIO状态图。
树莓派Qt开发入门(一):流水灯实验——GPIO的使用
可以看到BCM编号和wiringPi编号有区别,下面我们会使用wiringPi编号对GPIO进行开发。

8位LED灯模块

本次开发装置采用一个8位 LED 流水灯模块来作为被控对象,完成流水灯的控制。

D0~D7 这8个脚位分别控制这8个LED,所以只要跟树莓派的GPIO数字引脚连接起来就好。另外旁边有三个 RGB 的脚位,需要跟 GND 相连,跟R相连就亮红色,跟G相连就亮绿色,跟B相连就亮蓝色,三个同时连起来就全都亮。
树莓派Qt开发入门(一):流水灯实验——GPIO的使用

开发过程

首先新建一个Qt工程,在pro文件的最后添加一行代码:

LIBS += -lwiringPi
LIBS += -lwiringPiDev

然后在cpp文件中包含wiringPi的头文件:

#include "wiringPi.h"

使用前首先要初始化,在MainWindow的构造函数中添加如下初始化代码:

wiringPiSetup();

若希望将GPIO设定为输入/输出模式,则使用pinMode(pin,mode)来定义,例如将GPIO的0号引脚设定为输出模式:

pinMode(0,OUTPUT);

进行控制时,可以采用自己的控制逻辑编写代码,如:

digitalWrite(0,HIGH);
digitalWrite(0,LOW);

code

下面附上完整的代码
gpio.h

#ifndef GPIO_H
#define GPIO_H

#define D0 0
#define D1 1
#define D2 2
#define D3 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7

void GPIO_init(void);
void GPIO_blink(void)__attribute__((noreturn));

#endif // GPIO_H

gpio.cpp

#include "wiringPi.h"
#include "gpio.h"

static int D[8]={0,1,2,3,4,5,6,7};

void GPIO_init()
{    
	wiringPiSetup();
    	int i;
    	for(i=0;i<8;i++)
		pinMode(D[i],OUTPUT);
}

void GPIO_blink()
{    	
	int i,j;    
	while(1)    
	{        
		for(j=0;j<3;j++)        
		{            
			for(i=0;i<8;i++)                
				digitalWrite(D[i],HIGH);            
			delay(200);            
			for(i=0;i<8;i++)                
				digitalWrite(D[i],LOW);            
			delay(200);        
		}        
		for(i=0;i<8;i++)            
		digitalWrite(D[i],HIGH);        
		for(i=0;i<8;i++)        
		{            
			digitalWrite(D[i],LOW);            
			delay(100);            
			digitalWrite(D[i],HIGH);            
			delay(100);        
		}        
		for(i=0;i<8;i++)        
		{            
			digitalWrite(D[i],LOW);            
			delay(100);        
		}        
		for(i=0;i<8;i++)        
		{            
			digitalWrite(D[i],HIGH);            
			delay(100);        
		}    
	}
}
相关标签: 树莓派 Qt GPIO