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

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


使用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 ;
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值