質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

711閲覧

raspberry pi のGPIOについて(入力)

c_rim_zon

総合スコア20

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/05/22 07:03

raspberry piのLチカについてです.

wiringPiをインストールし,C言語でLチカさせようとし,コンパイルして実行したところ,動作しない症状が出ました.

そのため,ファイル操作を用いてLチカを試みたところ,指定したGPIOとは異なる場所から信号が出力されました.具体的には,GPIOで指定したピンではなく,ターミナルで"GPIO readall"を入力したときに出力されるピン表の"BCM"に準拠したピンから出力されます.

なにが原因なのかがわかりません.どうしたらよいのでしょうか.以下にLチカプログラムのソースコードを載せておきます.

#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; //GPIO25の使用開始を指定する //GPIOの宣言はBCMとかじゃなくて単純にGPIOでいい //やっぱりBCMの番号じゃないとダメ fd = open("/sys/class/gpio/export", O_WRONLY); if (fd < 0) { printf("GPIO export open error.\n"); exit(1); } write(fd,"25",3); close(fd); //0.1秒待つ(次のオープンでエラーになった場合があったため) usleep(100000); //GPIO25を出力に指定する fd = open("/sys/class/gpio/gpio25/direction", O_WRONLY);//O_WRONLYってなに! if (fd < 0) { printf("GPIO direction open error.\n"); exit(1); } write(fd,"out",4); //OK完全に理解した(ポプテピ) close(fd); //GPIO25に1を出力する(LED ON) fd = open("/sys/class/gpio/gpio25/value", O_WRONLY); if (fd < 0) { printf("GPIO value open error.\n"); exit(1); } write(fd,"1",2); //3秒待つ usleep(3 * 1000 * 1000); //GPIO21に0を出力する(LED OFF) write(fd,"0",2); close(fd); //GPIO25の使用終了を指定する fd = open("/sys/class/gpio/unexport", O_WRONLY); if (fd < 0) { printf("GPIO unexport open error.\n"); exit(1); } write(fd,"25",3); close(fd); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

c_rim_zonさん、

/sys/class/gpioでは、BCM番号が、使われます。

GPIOの番号指定は、Physical(物理)、BCM、wPi(wiringPi)と3種類の方法がありますが、
http://wiringpi.com/reference/setup/ に、wiringPiでは、以下のどれかひとつを使う前に呼びなさい、ということが書かれてます。

  • wiringPiSetup() : wiringPi 番号
  • wiringPiSetupGpio() : BCM番号
  • wiringPiSetupPhys() : 物理番号
  • wiringPiSetupSys() : BCM番号、実装は/sys/class/gpioの使用。ユーザが使用前にexportしとかないといけない。

..

指定したGPIOとは異なる場所から信号が出力されました

紛らわしいですよね。

投稿2019/05/23 15:47

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

c_rim_zon

2019/05/24 04:40

ありがとうございます。試してみます。
c_rim_zon

2019/05/29 03:38

解決しました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問