見出し画像

バーコード端末(S0102-0)2

大まかな仕様を決めた後にプログラムの構造を考えてみました。

スクリプトファイルは以下の2つです。
1._main.py インターバルタイマー処理と作業の流れを記述します。
2._sub1.py 手足となるデバイスを制御するclass の集合です。

アンダースコアはS0102と読み替えて構いません。
長くなる(くどく成る)のを避けるためにアンダースコアで表現します。

_sub1.py

各クラスの概要は以下の通りです。

class I2C
LCDの初期化や文字列表示を行います。
表示する文字列を受け取って記録する関数と、記録された文字列をLCDに送信して表示させる関数が主なものです。既に表示中の文字列に変更がない場合はLCDへの送信を中止します。

class IO
LED, ブザー, SWを制御するGPIOの初期化と、各デバイスの制御を行う関数群です。LEDの点灯、滅灯を制御する関数は青色LED用と、緑赤LED用に分けています。

class tim
現在時刻を所定フォーマットの文字列として返す関数です。
LCD表示やデータベースに記録するための文字列です。

class db
SQLite 簡易サーバーにアクセスする関数です。

_main.py

以下の関数があります。これ以外にも繰り返し使われる処理は関数化しますが、説明を省きます。

itimer
50msec間隔で呼ばれ、タクトスイッチの状態をスキャンします。
(ただし、S0102ではスイッチ入力を利用しません。)
また、100msec間隔でLCD表示を更新します。
class I2C を使うので、表示中の文字列に変化が無ければLCDに送信しません。

main
各class のインスタンスを生成し(表現が正しいか不明ですが・・・)各デバイスの初期化を行った後で、分岐ループに入ります。
分岐ループを抜けると、後始末(例:イベントタイマー停止とGPIOの開放)をして終了します。

分岐ループでは特定の分岐先変数に従ってjob0 を含むjobn の関数を呼んでいます。

job0
構造的には後述のjobn と同じですが、起動後デフォルトで呼ばれる関数で、バーコードリーダーから読み出した文字列によってmainが使う分岐先変数を書き換えて他の作業に遷移するための待機動作です。

jobn
ここに工程1、工程2、工程3、生産開始の処理を書きます。
_sub1.py のclass を駆使して作業を進めることで楽に書けるはずです。(たぶん)
バーコードリーダーで当該作業を終了する文字列を読み出すと、ループを抜けて前述分岐先変数をjob0 に書き換えて関数処理を終わります。

結果再びjob0 に戻って指示を待ちます。

コーディングとデバッグ開始

比較的小規模なプログラムですが、コーディングを始める前に、こういった構想を頭に描いてから始めていると思います。
私自身もタイトル図のような作図はしないまでも、何等か整理してから始めています。

構造をまとめたところで、コーディングに入ります。
先に紹介したプログラムを通じて既に出来ている部分も多いので、焦らず気楽に進めます。

使用するハードウェアB01-1 については以下の記事を参考にして下さい。

B01-1 ラクマ出品中 1/5
B01-1 アートワークデータ .COMP


出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。