您的位置:首页 > 编程语言 > C语言/C++

树莓派瞎玩~6~控制GPIO之C语言

2016-03-27 19:40 281 查看
树莓派瞎玩~6~控制GPIO之C语言

控制GPIO输出

读取GPIO引脚的状态轮询

读取GPIO引脚的状态中断

使用C控制GPIO时,常用的是
wiringPi
模块,点此查看API文档。现在使用C语言完成上文Python语言实现的相同功能。

控制GPIO输出

创建一个
.c
文件,如
gpio24_blink.c
,编辑代码

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#define GPIO_PIN      24

int main()
{
if(wiringPiSetupGpio() == -1) //wiringPiSetupGpio()表示使用GPIO编号,wiringPiSetup()则使用物理编号
{
printf("Setup wiringPi failed!");
return -1;
}

pinMode(GPIO_PIN, OUTPUT); // 设置引脚为输出

while(1)
{
digitalWrite(GPIO_PIN, 1); // 设置输出高电平
delay(1000);
digitalWrite(GPIO_PIN, 0); // 设置输出低电平
delay(1000);
}

return 0;
}


保存后回到命令行链接执行。

pi@raspberrypi:~/python_gpio $ gcc gpio24_blink.c -o gpio24_blink  -l wiringPi
pi@raspberrypi:~/python_gpio $ sudo ./gpio24_blink


读取GPIO引脚的状态(轮询)

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#define GPIO_PIN      24

int count = 5;

int main()
{
if(wiringPiSetupGpio() == -1) //wiringPiSetupGpio()表示使用GPIO编号,wiringPiSetup()则使用物理编号
{
printf("Setup wiringPi failed!");
return -1;
}

pinMode(GPIO_PIN, INPUT); // 设置引脚为输出

printf("waiting 5 times...\n");
fflush(stdout);

while(count > 0)
{
if(digitalRead(GPIO_PIN) == 1)
{
count--;
printf("input high\n");
fflush(stdout);
}
delay(100);
}

printf("exit...\n");
return 0;
}


读取GPIO引脚的状态(中断)

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#define GPIO_PIN      24

static volatile int count = 5;

void doThings(void)
{
if(count > 0)
{
--count;
printf("input high\n");
fflush(stdout);
}
}

int main (void)
{
int myCounter = 0;

if(wiringPiSetupGpio() == -1) //wiringPiSetupGpio()表示使用GPIO编号,wiringPiSetup()则使用物理编号
{
printf("Setup wiringPi failed!");
return -1;
}

if(wiringPiISR(GPIO_PIN, INT_EDGE_FALLING, &doThings) < 0)
{
printf("Regist interrupts failed!");
return -2;
}

printf("waiting 5 times...\n");
fflush(stdout);
while(1)
{
if(count <= 0)
break;
delay(100);
}

printf("exit...");
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: