今日やること: スイッチを押すとLEDが光るようにする
キーワード: C言語、Scratch、GPIO、wiringPi、LED、SW、ラズベリーパイ、ビギナーズボード、Rabyy
※このマンガはフィクションです。実在の人物や団体とも以下の情報ともあまり関係ありません。
ハードウェア
こちら↓のように、ハードウェアを接続します。
[回路図]
(*ビギナーズボードを使えばハードウェアの配線は不要です。)
ソフトウェア (C言語)
C言語でプログラムを書きます。 Scratchでプログラミングする場合はこちら
以下のプログラムのソースコードをコピペして、適当なところに適当な名前で保存します。
ここでは /home/pi/sample_programs_woodbox/ というディレクトリに sw.c という名前で保存するとしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/***************************************************************************** * Description: SWに対応したLEDが点灯する。 * Last Update: 2015/10/01 mariko.N @woodbox * * This software is a free software and there is NO WARRANTY. * サンプルなのでご自由にどうぞ。ただし保証はしませんm(。・ω・。)m *****************************************************************************/ #include <stdio.h> #include <wiringPi.h> const int SW_R = 4; const int SW_Y = 5; const int SW_W = 6; const int SW_G = 7; const int LED_R = 8; const int LED_Y = 9; const int LED_W = 10; const int LED_G = 11; int main(void) { //wiringPi initialize if(wiringPiSetupGpio() < 0) return 1; //set LEDs output mode pinMode(LED_R, OUTPUT); pinMode(LED_Y, OUTPUT); pinMode(LED_W, OUTPUT); pinMode(LED_G, OUTPUT); //set SWs input mode pinMode(SW_R, INPUT); pinMode(SW_Y, INPUT); pinMode(SW_W, INPUT); pinMode(SW_G, INPUT); //Turns on an LED when you push an SW while(1) { if(digitalRead(SW_R) == LOW) digitalWrite(LED_R,HIGH); else digitalWrite(LED_R,LOW); if(digitalRead(SW_Y) == LOW) digitalWrite(LED_Y,HIGH); else digitalWrite(LED_Y,LOW); if(digitalRead(SW_W) == LOW) digitalWrite(LED_W,HIGH); else digitalWrite(LED_W,LOW); if(digitalRead(SW_G) == LOW) digitalWrite(LED_G,HIGH); else digitalWrite(LED_G,LOW); } return 0; } |
前回と同じようにプログラムをコンパイルします。
1 2 |
pi@raspberrypi ~ $ gcc -o sw sw.c -lwiringPi pi@raspberrypi ~ $ sudo ./sw |
SWを押すとLEDが光りました。
おつかれさまです。
ソフトウェア (Scratch GPIO)
Scratch GPIOでプログラムを書いてみます。
スプライトを4つ用意します。それぞれが赤、黄、白、緑のLEDを表すことにします。
各スプライトのスクリプトを以下のようにします。
緑のハタを押して実行します。
赤いスイッチを押すと、赤いLEDが光り、スクラッチのネコが赤くなります。他の色も同じようになります。
スクラッチの画面とスイッチ+LEDが連動して動きました。
おつかれさまです。
おまけ
今回のプログラムは、「ポーリング」という方法でSWが押されているかどうかを検出しています。
定期的にSWが押されたか確認している、ということです。
着信音やバイブ機能のないスマホを持ったときの行動に似ています。
[ポーリング処理]
———————————–
メール来たかな? →来てない。
(そわ) メール来たかな? →来てない。
(そわそわ) メール来たかな? →来てない。
(そわそわそわ) メール来たかな? →来てた。LEDを点灯するんだ。
———————————–
定期的にチェックしなきゃいけないので面倒です。
ポーリング処理に対して、割り込み処理というものがあります。こちらは、着信音のなるスマホです。
[割り込み処理]
———————————–
~ 何かちがうことをやっている。 ~
(ピコン) メール来たのでLEDを点灯しよう。
———————————–
こっちのほうが効率的です。そのうち割り込み処理についても記事にしようと思います。
おしまい。