WiringPiを使うのはとっても便利です。
コマンドやプログラムからgpioを制御できます。
その時に、ちょっとピン指定で、コンガラガッテしまったので、
自分のメモとして書いておきます。
gpioを制御するとき
・基板上のPIN番号
・WringPiのgpio 番号
・CPUのgpio番号
の3つを意識しないとならない。
その対比表が下図。
gpio readall
とコマンドを打ては図のようなgpioの状態の一覧がでてきます。
・基板上の物理的なPIN番号35番
・WringPiの番号 GPIO.24、つまり、wPi欄の番号24
・CPUのGPIO番号は、19になります。
この時に、基本BCMと書かれたCPUのGPIO番号は無視する
例えば、基盤上の35番PINを書き込みモードにして、
値を1にする場合には、
gpio mode 24 output
gpio write 24 0
とすればよい。
WiringPiを使ったC言語のプログラムからも、
pinMode(24, INPUT);
int pV = digitalread(24);
となる。
gpioコマンドには、-g のオプションがつけれるが、
これを付けるとCPUのGPIOになる。
従って、
gpio -g mode 19 output
gpio -g write 19 0
ややっこしくなるので、-g オプションは使わない方がよいね。
Peace!
おまけ、GPIOの値を読み込むプログラム
gcc -o sample sample.c -lwiringPi
で、
違う端末画面から、
gpio write 24 1
gpio write 24 0
とかすると、
画面に、こんな感じで、表示されます。(^^)
--------------------------digitalRead (24) = 1
--------------------------digitalRead (24) = 1
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0
--------------------------digitalRead (24) = 0
/***********************************************************
** Function : Sample program of wiringPi.
** File Name: sample.c
** Library :
** Author : Naoki Kabaya
** create : 10/02/2016 version 1
** modify :
***********************************************************/
//----------------------------------------------------------
// Includes
//----------------------------------------------------------
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
//Prototype
int main (void);
int main (void)
{
int pV = 0;
if (wiringPiSetup () == -1){
exit(1);
}
//GPIO Setup
pinMode (24, INPUT);
printf("----------------------GPIO Setup\n");
//Loop
for (;;) {
pV = 0;
pV = digitalRead (24);
printf("--------------------------digitalRead (24) = %d\n", pV);
delay(500);
}
return 0 ;
}
0 件のコメント:
コメントを投稿