桜のはなびらどっとねっとロゴ

桜のはなびらどっとねっと

Raspberry Pi 2 で複数桁の7セグLED制御(2) マルチスレッド化

この記事は1年以上前に投稿された記事です。 この警告表示について

IMG_4671

以前、Raspberry Pi 2 で複数桁の7セグLED制御 を実行しましたが、この処理はメイン処理系でLED表示を無限ループさせていました。しかし、これでは7セグLEDを表示している場合に他の処理ができなかったり、逆に他の処理をしている際にLEDの表示が止まるという感じで少々不便でしたね。

そこで今回はそのLED表示部分をマルチスレッド化して別処理にしてみたいと思います。

注意

上記の記事の応用編なのでその記事を先に読んでください。
なお、最後のソースコードのGPIOポートは当方の事情によりLEDの接続ポートが変わっております。ご注意ください。

なお、この記事では作成した実機通りのピン配列にしていますが。後になってGPIOの「8・9」番ポートに何かが接続されていると、Raspberry Piが起動しない(シリアル通信をしようとして失敗する?)という現象が発生しましたので。LED_1・LED_2は別のポートを使ったほうがいいかもしれません。(2つずらして10・11・12を使えば問題ありません。)

接続

元記事の通りですが、今回GPIOポートを変更しました。

変更前

変更後

変更理由

この配列だと、LED表示制御に digitalWriteByteコマンドが利用できるためです。
(使ってませんが。)

コーディング

まずは必要なライブラリをインクルードします。

次に、マルチスレッド化する命令を抜き出します。
今回は数字を表示するための命令を抜き出しました。

※この関数は実際に使用する前に記述しないとエラーになります。

num変数をグローバル変数として定義します。(関数外にint num;を記述するだけ)

main変数にて上記関数をスレッド化

これで後はnum変数の数値を変えるだけでLEDの表示が変更され、LEDを表示していてもメイン処理がLED表示に邪魔されなくなりました。

以下、numを1000まで順に表示していくコードを貼り付けておきます。

コメントを残す

メールアドレスが公開されることはありません。