Lチカをもっと楽しむ(2) ruby (A)でrubyを勉強しましたが、
もう少しスマートなコードへと進化させます。

ライブラリを使えば 簡単コード

「pi_piper」といるライブラリを使用します。
デフォルトでは入っていないのでインストールしましょう。


■スーパーユーザー切り替え
面倒な「sudo 」を省略する為切り替えます。
$ sudo su
以降プロンプトが # に変わります。




■下準備で「ffi」のインストールと設定
・インストール
root@raspberrypi:~# apt-get install ruby-ffi

・gemへの登録
root@raspberrypi:~# cd /var/lib/gems/1.9.1/specifications/

root@raspberrypi:/var/lib/gems/1.9.1/specifications# ln -s /usr/share/rubygems-integration/1.9.1/specifications/ffi-1.0.11.gemspec .

・gem登録の確認
root@raspberrypi:/var/lib/gems/1.9.1/specifications# gem list
*** LOCAL GEMS ***
ffi (1.0.11)


■次に「pi_piper」のインストール
・インストール
root@raspberrypi:~# gem install pi_piper

・gem登録の確認
root@raspberrypi:~# gem list
*** LOCAL GEMS ***
ffi (1.0.11)
pi_piper (1.3.2)



【往復点滅】

LEDが右へ左へ動きます。

ファイルの準備。
gpio_pp_rl.rb
<=========================

## ライブラリを使用する宣言
require ‘pi_piper’

## GPIO設定  I/O設定 出力を指定
pin22 = PiPiper::Pin.new(:pin => 22, :direction => :out)
pin23 = PiPiper::Pin.new(:pin => 23, :direction => :out)
pin24 = PiPiper::Pin.new(:pin => 24, :direction => :out)
pin25 = PiPiper::Pin.new(:pin => 25, :direction => :out)

## 5回ループ
5.times do

## GPIO出力 LED制御
sleep 0.1
pin22.on

sleep 0.1
pin22.off
pin23.on

sleep 0.1
pin23.off
pin24.on

sleep 0.1
pin24.off
pin25.on

sleep 0.1
pin25.off

sleep 0.1
pin25.on

sleep 0.1
pin25.off
pin24.on

sleep 0.1
pin24.off
pin23.on

sleep 0.1
pin23.off
pin22.on

sleep 0.1
pin22.off
end

## GPIO開放
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(22)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(23)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(24)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(25)
uexp.close
=========================>



■ファイルの準備が出来たら実行。
root@raspberrypi:/home/pi/lchika# ruby gpio_pp_rl.rb



【2進カウンター】

2進数のカウンター動作をLEDで表現します。

ファイルの準備。
gpio_pp_bin.rb
<=========================

require ‘pi_piper’

##############################
## MAIN
##############################
def main()

pin22 = PiPiper::Pin.new(:pin => 22, :direction => :out)
pin23 = PiPiper::Pin.new(:pin => 23, :direction => :out)
pin24 = PiPiper::Pin.new(:pin => 24, :direction => :out)
pin25 = PiPiper::Pin.new(:pin => 25, :direction => :out)

for lii in 1..5 do

for iii in 1..15 do

iii22 = iii & 8
iii23 = iii & 4
iii24 = iii & 2
iii25 = iii & 1

if iii22 > 0 then
pin22.on
else
pin22.off
end

if iii23 > 0 then
pin23.on
else
pin23.off
end

if iii24 > 0 then
pin24.on
else
pin24.off
end

if iii25 > 0 then
pin25.on
else
pin25.off
end

sleep 0.1

end
end

pin22.off
pin23.off
pin24.off
pin25.off

uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(22)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(23)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(24)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(25)
uexp.close

end

#####################################################
## m a i n
#####################################################
main()

#####################################################
## E N D
#####################################################
=========================>

■ファイルの準備が出来たら実行。
root@raspberrypi:/home/pi/lchika# ruby gpio_pp_bin.rb



【2進 アップ・ダウン】

2進数のカウンターをアップ・ダウンさせます。
また、グローバル変数・サブルーチンを使用してmainをスッキリさせます。

ファイルの準備。
gpio_pp_bing.rb
<=========================

require ‘pi_piper’

##############################
## OPEN
##############################
def PinOpen()
$pin22 = PiPiper::Pin.new(:pin => 22, :direction => :out)
$pin23 = PiPiper::Pin.new(:pin => 23, :direction => :out)
$pin24 = PiPiper::Pin.new(:pin => 24, :direction => :out)
$pin25 = PiPiper::Pin.new(:pin => 25, :direction => :out)
end

##############################
## PIN22
##############################
def Pin22( pvalue )
if pvalue > 0 then
$pin22.on
else
$pin22.off
end
end

##############################
## PIN23
##############################
def Pin23( pvalue )
if pvalue > 0 then
$pin23.on
else
$pin23.off
end
end

##############################
## PIN24
##############################
def Pin24( pvalue )
if pvalue > 0 then
$pin24.on
else
$pin24.off
end
end

##############################
## PIN25
##############################
def Pin25( pvalue )
if pvalue > 0 then
$pin25.on
else
$pin25.off
end
end

##############################
## PIN ACT
##############################
def PinAct( lvalue )
sleep 0.1
iii22 = lvalue & 8
iii23 = lvalue & 4
iii24 = lvalue & 2
iii25 = lvalue & 1
Pin22( iii22 )
Pin23( iii23 )
Pin24( iii24 )
Pin25( iii25 )
end

##############################
## CLOSE
##############################
def PinClose()

$pin22.off
$pin23.off
$pin24.off
$pin25.off

uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(22)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(23)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(24)
uexp.close
uexp = open(“/sys/class/gpio/unexport”, “w”)
uexp.write(25)
uexp.close
end

##############################
## MAIN
##############################
def main()

PinOpen()

for loop1 in 1..5 do

0.upto(15) do |loop2|
PinAct( loop2 )
end

15.downto(0) { |loop3|
PinAct( loop3 )
}

end

PinClose()

end

#####################################################
## m a i n
#####################################################
main()

#####################################################
## E N D
#####################################################
=========================>

■ファイルの準備が出来たら実行。
root@raspberrypi:/home/pi/lchika# ruby gpio_pp_bing.rb







Raspberry Pi  お問合せ ヘルプ


Raspberry Pi Console Board