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

Posted xiaobaidonghui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派瞎玩~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 ;

以上是关于树莓派瞎玩~6~控制GPIO之C语言的主要内容,如果未能解决你的问题,请参考以下文章

树莓派瞎玩~4~控制GPIO

树莓派瞎玩~7~RPi.GPIOのWIKI文档

树莓派瞎玩~7~RPi.GPIOのWIKI文档

树莓派瞎玩~7~RPi.GPIOのWIKI文档

树莓派瞎玩~1~系统的安装.md

树莓派瞎玩~9~dns服务器