3.4 Raspberry Pi B+ スイッチでLEDをON/OFF


3.4 Lチカを部品にしよう

(1) Lチカを部品(関数)にします。部品は初期化、LEDのオン、LEDのオフの3種類です。
LEDの初期化、LEDのオン、LEDのオフを部品(関数)にします。
*Pythonの新しい命令を使います。
*def
*書き方
def 関数名():
インデント命令
インデント命令
インデントスペース

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led1b_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。
サンプルの様にプログラムを変更します。 -初期化の関数「def led1_init(): ~」を追加します。
-LED1をオンする関数「def led1_on(): ~」を追加します。

サンプルプログラミング1

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led1_init():
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

def led1_on():
GPIO.output(LED1, GPIO.HIGH) # LED1 ON

def led1_off():
GPIO.output(LED1, GPIO.LOW) # LED1 OFF

# start

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led1_init()

for i in range(10): # repeat 10 times
print(i)
led1_on()
time.sleep(0.5)

led1_off()
time.sleep(0.5)

GPIO.cleanup()

 

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1b_1.py」を実行します。
*LEDが1秒間隔で10回点滅します。その後に、「led1b done」のメッセージが出ます。

raspi_code_3.4_1

⑤ 電源をきります。

「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_2

(2) LEDを増やそう

作ったLチカを部品(関数)を増やします。部品(関数)にすると、コピーペーストして、少し直すだけで新しい部品(関数)が簡単に出来ます。

①組立
下の配線図、回路図をみて、回路を組立て下さい。

raspi_3.4_1 raspi_3.4_2

② 「nano」エディター立ち上げます。

「nano rpi_bp_gpio_led2_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

③ プログラムを変更します。

サンプルの様にプログラムを変更します。

-初期化の関数「def led2_init(): ~」を追加します。
-LED1をオンする関数「def led2_on(): ~」を追加します。
-LED1をオフする関数「def led2_off(): ~」を追加します。

サンプルプログラミング2

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led1_init():
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

def led1_on():
GPIO.output(LED1, GPIO.HIGH) # LED1 ON

def led1_off():
GPIO.output(LED1, GPIO.LOW) # LED1 OFF

def led2_init():
GPIO.setup(LED2, GPIO.OUT) # set GPIO6 output

def led2_on():
GPIO.output(LED2, GPIO.HIGH) # LED2 ON

def led2_off():
GPIO.output(LED2, GPIO.LOW) # LED2 OFF

#start
GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led1_init()

LED2 = 6 # LED1 –> GPIO6
led2_init()

for i in range(10):
print(i)
led1_on()
led2_on()
time.sleep(0.5)

led1_off()
led2_off()
time.sleep(0.5)

 

 

 

 

④ 入力を終わります。

「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

⑤ 入力したプログラムを実行します。

「sudo python rpi_bp_gpio_led2_1.py」を実行します。
*LED1とLED2が1秒間隔で10回点滅します。その後に、「led2 done」のメッセージが出ます。

raspi_code_3.4_3

⑥ 電源をきります。

「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_4

(3) 同じ形の関数をまとめよう

LED1とLED2の部品(関数)はGPIO番号だけが違っています。違っているGPIO番号を引数(ひきすう)で渡すと、初期化、LEDのオン、LEDのオフの部品(関数)をまとめることできます。

LEDを増やしても、作る関数は増えません。

*Pythonの新しい命令を使います。
*def

*書き方

def 関数名(引数):
インデント命令
インデント命令
インデントスペース

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led2a_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。

サンプルの様にプログラムを変更します。
-初期化の関数「def led_init(leds): ~に変えます。
-LED1をオンする関数「def led_on(leds): ~」に変えます。 -LED1をオフする関数「def led_off(leds): ~」に変えます。
-LED2の関数は全て削除します。

*関数を定義する部分がまとまって、「(2)LEDを増やそう」のサンプルプログラムに比べて、かなりすっきりしました。

サンプルプログラミング3

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led_init(leds):
GPIO.setup(leds, GPIO.OUT) # set GPIO leds output

def led_on(leds):
GPIO.output(leds, GPIO.HIGH) # leds ON

def led_off(leds):
GPIO.output(leds, GPIO.LOW) # leds OFF

#start
GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led_init(LED1)

LED2 = 6 # LED1 –> GPIO6
led_init(LED2)

for i in range(10):
print(i)
led_on(LED1)
led_on(LED2)
time.sleep(0.5)

led_off(LED1)
led_off(LED2)
time.sleep(0.5)

GPIO.cleanup()

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led2a_1.py」を実行します。
*LED1とLED2が1秒間隔で10回点滅します。その後に、「led2 a done」のメッセージが出ます。
*実行した結果は前と変わりません。

raspi_code_3.4_5

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_6

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です