wide_snow’s blog

30代の組込みエンジニア(ファーマー)による技術メモの記録

スポンサードリンク

Raspberry Pi 2でLED点灯/消灯!(Lチカ) C言語編

以前の記事ではLinuxのコマンドを使用して

LEDの制御(点灯/消灯)を行いました。

今回はC言語を使って同じことを行おうと思います。

参考)使用している部品や接続方法は以前の記事をご覧ください。

wide-snow.hatenablog.com

LEDを制御するプログラムの作成

いきなりですが、まずは下記のようなプログラムを書きます。

なおGPIO18をLEDに使用していますので

ご利用の環境に合わせて"18"の数字は変更してください。

 

pi@raspberrypi ~ $ vim ledctrl.c

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
int main(int argc, char **argv)
{
    int fd = 0;
    int loop = 0;

    printf("start led blink!!\n");
 
    // GPIO18使用開始
    fd = open("/sys/class/gpio/export", O_WRONLY);
    if(fd < 0)
    {
        printf("open error.\n");
        exit(1);
    }
    write(fd,"18",3);
    close(fd);
 
    // 1000ms wait
    usleep(1000 * 1000); // 早すぎると次の処理がエラーになる
 
    // GPIO18を出力に指定する
    fd = open("/sys/class/gpio/gpio18/direction", O_WRONLY);
    if(fd < 0)
    {
        printf("direction open error.\n");
        exit(1);
    }
    write(fd,"out",4);
    close(fd);

    // 1000ms wait
    usleep(1000 * 1000);
 
    fd = open("/sys/class/gpio/gpio18/value", O_WRONLY);
    if(fd < 0)
    {
        printf("value open error.\n");
        exit(1);
    }

    for(loop=0; loop<100; loop++)
    {
        //GPIO18に1を出力する(LED ON)
        write(fd,"1",2);
        //500msec wait
        usleep(500 * 1000);
 
        //GPIO18に0を出力する(LED OFF)
        write(fd,"0",2);
        //500msec wait
        usleep(500 * 1000);
    }

    close(fd);
 
    //GPIO18使用終了
    fd = open("/sys/class/gpio/unexport", O_WRONLY);
    if (fd < 0)
    {
        printf("unexport open error.\n");
        exit(1);
    }
    write(fd,"18",3);
    close(fd);

    printf("finish\n");
 
    return 0;
}

 

※ このプログラムを書くためのテキストエディタvimを使用しています。

参考)vimのインストール方法

wide-snow.hatenablog.com

参考)日本語フォントの使い方

wide-snow.hatenablog.com