おはようございます。
今朝の群馬県の様子です。
いつもの様にYoutube経由で、群馬県庁のライブカメラにリンクを張ってあります。
群馬県庁32階(北側)からの眺望 ライブ配信
今回は、マニアックな記事を書きます。
螻蛄の自慢話:
自称4言語を操るキャラ。
その内の2つは、プログラミング言語(C言語とPython)
残りの2つは、怪しい英語と日本語
です。(笑)
で紹介した【After】のスクリプトでは、イベントドリブンの
#wait_for_edge() function
#The wait_for_edge() function is designed to block execution of
#your program until an edge is detected.
の関数を使いました。Raspberry PiのGPIOに入力機能を持たせて、そのエッヂを検出すると、停止していた処理を開始するという関数です。
今回は、
#event_detected() function
#The event_detected() function is designed to be used in a loop with other things,
#but unlike polling it is not going to miss the change in state of an input
#while the CPU is busy working on other things.
を使用したスクリプトを紹介します。
#/usr/bin/python3
#https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/
#event_detected() function
#The event_detected() function is designed to be used in a loop with other things,
#but unlike polling it is not going to miss the change in state of an input
#while the CPU is busy working on other things.
import RPi.GPIO as GPIO
from time import sleep
gpio_led = 17
gpio_sw = 5
class Fio:
def __init__(self):
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio_led, GPIO.OUT)
GPIO.setup(gpio_sw, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.output(gpio_led, 0)
def fade_in_out(self, pi):
#Threaded callbacks
#RPi.GPIO runs a second thread for callback functions. This means that callback functions
#can be run at the same time as your main program, in immediate response to an edge.
pi = GPIO.PWM (gpio_led, 50 ) #( pin, Hz )
pi.start (0)
#fade in
print(end='\nfade-in')
for i in range(0, 100):
duty = i
pi.ChangeDutyCycle( duty )
sleep(0.1)
#print(end = '.')
#fade out
print(end='\nfade-out')
for i in range(0, 100):
duty = 100 - i
pi.ChangeDutyCycle( duty )
sleep(0.1)
#print(end = ".")
#switch off
pi.stop()
def loop(self):
try:
while True:
sleep(1)
except KeyboardInterrupt:
pass
def finish(self):
print("Stop the program and turning off the LED")
GPIO.cleanup(gpio_led)
GPIO.cleanup(gpio_sw)
def main():
pwm = Fio()
GPIO.add_event_detect(gpio_sw, GPIO.FALLING, callback=pwm.fade_in_out, bouncetime=200)
pwm.loop()
pwm.finish()
# If this script was called as shell command, __name__ is '__main__'.
if __name__ == '__main__':
main()
になります。
ちょっとオブジェクト指向っぽくして、クラス、メソッド、インスタンスを使ってみました。
###
Classってクラス = 学級 というよりも、軍隊の最小単位 が相応しいと思っています。 Class Fio
Methodは、その隊員ですね。 Class Fioの中の各関数
以上は、あくまでも状態を意味します。
このClassにミッションを与えます。それが、Instanceです。 pwm = Fio()
このインスタンスを設定することで、その隊が起動できる状態になります。
###
また、
GPIO.add_event_detect(gpio_sw, GPIO.FALLING, callback=pwm.fade_in_out, bouncetime=200)
で割り込み処理(イベントドリブン)の設定をしています。GPIO.add_event_detect()は、引数としてコールバック関数へのポインタを渡します。
callback=pwm.fade_in_out の部分です。このコールバック関数が、実質的な割り込み処理を行っています。
これは、
pwmというミッションを帯びたClass Fioに属するfade_in_out()隊員が遂行する仕事
ってことになります。
この様に人間社会の摂理を体系的に整理して、コンピューターに指示を出す(アルゴリズム)ことがプログラミング言語とも言えます。
という意味で、私は自称4言語を扱うキャラなのです。笑笑
は、
# If this script was called as shell command, __name__ is '__main__'.
if __name__ == '__main__':
main()
の部分の様子です。
勿論、Thonnyを起動してから、その中で実行しても構いません。
ps 本日は、wifeが予約してくれた帯状疱疹のワクチン接種をしてきます。
ではでは。