プログラムでLEDを自在に操る ruby (A)
シェルスクリプトでもLEDに動きを付ける事が出来ましたが、
基本的にコマンドを順に記述するので、
ファイルには似たようなコマンドが並んでとても見難くくなります。
プログラムを使ってすっきりさせましょう。
実行の際「Lチカ」はスーパーユーザーでコマンド実行する事になりますので、、
予めスーパーユーザーに切り替えておくか、都度ファイル名の前に sudo を付加する事になります。
■スーパーユーザー切り替え:
$ sudo su
以降プロンプトが # に変わります。
実行コマンド
# ruby gpio22onoff.rb
■都度入力:
実行コマンド
$ sudo ruby gpio22onoff.rb
【点滅させてみよう】
先ずは、LEDを1個だけ点滅させてみましょう。
適当なフォルダを作って、そこで作業します。
きばん本舗のスタッフは「lchika」フォルダで作業しました。
root@raspberrypi:/home/pi/lchika#
さて、ファイルを作って動かしましょう。
gpio22onoff.rb
<=========================
## GPIO設定
io = open(“/sys/class/gpio/export”, “w”)
io.write(22)
io.close
## I/O設定 出力を指定
dir = open(“/sys/class/gpio/gpio22/direction”, “w”)
dir.write(“out”)
dir.close
## out 変数はLEDの点灯/消灯用
out = 1
## 10回ループ
10.times do
## GPIO出力 LED制御
v = open(“/sys/class/gpio/gpio22/value”, “w”)
v.write(out)
v.close
## 点灯/消灯切り替え
out = out == 1 ? 0 : 1
## ウェイト 0.5秒
sleep 0.5
end
## GPIO開放
uexport = open(“/sys/class/gpio/unexport”, “w”)
uexport.write(22)
uexport.close
=========================>
■ファイルの準備が出来たら実行。
root@raspberrypi:/home/pi/lchika# ruby gpio22onoff.rb
「点灯/消灯切り替え」部分が見慣れませんが、
下記の「if」を使った時と同じ動きです。
—————————-
if out == 0 then
out = 1
else
out = 0
end
—————————-
比べると1行でスッキリしてますね。
【往復点灯】
LEDが右へ左へ動きます。
ファイルの準備。
gpio_rl.rb
<=========================
## GPIO22~GPIO25 GPIO設定・I/O設定 出力を指定
io = open(“/sys/class/gpio/export”, “w”)
io.write(22)
io.close
dir = open(“/sys/class/gpio/gpio22/direction”, “w”)
dir.write(“out”)
dir.close
io = open(“/sys/class/gpio/export”, “w”)
io.write(23)
io.close
dir = open(“/sys/class/gpio/gpio23/direction”, “w”)
dir.write(“out”)
dir.close
io = open(“/sys/class/gpio/export”, “w”)
io.write(24)
io.close
dir = open(“/sys/class/gpio/gpio24/direction”, “w”)
dir.write(“out”)
dir.close
io = open(“/sys/class/gpio/export”, “w”)
io.write(25)
io.close
dir = open(“/sys/class/gpio/gpio25/direction”, “w”)
dir.write(“out”)
dir.close
## 5回ループ
5.times do
## LED制御
sleep 0.1
v = open(“/sys/class/gpio/gpio22/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio22/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio23/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio23/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio24/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio24/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio25/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio25/value”, “w”)
v.write(0)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio25/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio25/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio24/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio24/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio23/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio23/value”, “w”)
v.write(0)
v.close
v = open(“/sys/class/gpio/gpio22/value”, “w”)
v.write(1)
v.close
sleep 0.1
v = open(“/sys/class/gpio/gpio22/value”, “w”)
v.write(0)
v.close
end
## GPIO開放
uexport = open(“/sys/class/gpio/unexport”, “w”)
uexport.write(22)
uexport.close
uexport = open(“/sys/class/gpio/unexport”, “w”)
uexport.write(23)
uexport.close
uexport = open(“/sys/class/gpio/unexport”, “w”)
uexport.write(24)
uexport.close
uexport = open(“/sys/class/gpio/unexport”, “w”)
uexport.write(25)
uexport.close
=========================>
■ファイルの準備が出来たら実行。
root@raspberrypi:/home/pi/lchika# ruby gpio_rl.rb
「GPIO開放」を行なわないと、
2回目にプログラムの実行をした時にエラーが出ます。
シェルスクリプトでも記載しましたが、
後片付けはキチンとやっておきましょう!!
Raspberry Pi お問合せ ヘルプ
Lチカをもっと楽しむ(3) ruby (B)