PythonとRaspberry Piで部品の状態をファイルに記憶させる(その2)

0
1183

Python と Raspberry Pi で部品の状態をファイルに記憶させる(関数の説明)

前回は、プログラムを終了した時に、その設定を保存しておきたい場合に役立つ情報として、ファイルに書き込むための処理のコードを全て記述しました。

今回はその続きとなり使用している関数説明になります。

ファイル操作前後の処理

ファイルの操作

ファイルの操作を使うためには、ファイルを「open(オープン)」する必要があります。
またファイルを使い終わったら「close(クローズ)」します。

ファイルを開くときには、ファイル名と操作モードを指定する必要があるので、以下の様に設定を行っています。

[code]
//読み込み時
mode = ‘rt’

//書き込み時
mode = ‘wt’
[/code]

ファイルへの書き込みの例

ファイルへテキストデータを書き込むには、以下の様なコードになります。

[code]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

file_name = ‘led_status.txt’
status = ‘[1,0,0,]’
mode = ‘wt’
file_obj = open(file_name, mode)
file_obj.write(status)
file_obj.close()
[/code]

ファイルをopenすると、Pythonプログラムがでファイルを扱えるファイルオブジェクトというものが用意され、これを変数(file_obj)へ代入してプログラムから使用します。

上記のコードでは、'[1,0,0]’という文字列を、led_status.txtというファイルへ書き込みを行っています。

next_led()関数

コードの最初にあるパラメータにで渡されたled_listの各要素について点灯しているLEDかどうかを調べ、現在点灯しているLEDかどうかを調べて、LEDの添字を取得し、current_indexへ保存をしています。

次に点灯するLEDの添字が3に等しかったら0に戻し、最大値を超えないように処理をしています。

44行目で現在のLEDを消灯したら45行目で次のLEDを点灯しています。さらに、この関数の中では、WAIT_TIMEで指定した秒数を経過してから関数を終了しています。

メイン処理

プログラムのメインの処理は、main()という関数として用意します。

50行目~55行目の3つのLEDを表すリスト変数led_list
スイッチを表す変数buttonを用意しています。

58行目~62行目はLEDの状態をファイルから読み込んで、status_update()関数でLEDに反映を行い、WAIT_TIMEで指定した秒数LEDを点灯したら次の処理へ移行します。

セーブの処理をしたらプログラムを終了するので、その判定に変数saved を使用します。
また、65行目のwhile文に指定されている条件式は「not saved」となっているので、「not」は次に続く値の真偽を反転します。

savedがFalseの場合は、Trueとなり、
savedがTrueの場合は、Falseとなります。

66行目~74行目の繰り返し処理ではnext_led()関数で次のLEDを点灯し、続けてスイッチが押されているかどうかを判定します。
スイッチが押されていたら、セーブ処理を行い、変数savedをTrueにしています。

これで、タクトスイッチを使った、LEDを順番に光らせさらに、プログラムを終了したらその設定値を保存し、次プログラムが起動するとその設定値を復元するものが完成しました。

今回使用した部品は以下から購入できます。
Raspberry Pi 4B 電子工作学習キット

RaspberryPi4B-4G SD電子工作学習キット