ラズパイでLED点灯②(応用編)

ラズパイでLED点灯②(応用編) RaspberryPi
スポンサーリンク

こんにちは!機械学習の「教師あり学習」のアルゴリズムに苦戦しています。駆け出しエンジニアのまっきーです。まだまだ勉強が足りませんね….

今回は、前回に引き続きLED点灯を行っていきたいと思います。

本日は3つの課題に取り組みます!PDFはこちらからダウンロードできます。

課題一覧

  1. 左シフトを繰り返すLED点灯
  2. 左シフトと右シフトを繰り返すLED点灯
  3. キーボードから入力された数値を2進数でLEDに表示する

電子回路

回路図は前回と全く同じです。

画像に alt 属性が指定されていません。ファイル名: LED点灯回路-1-1024x803.jpg

左シフトを繰り返すLED点灯

シフト演算とは、ビットを左右にシフトさせる演算のことです。

シフト演算には右シフト(>>)と左シフト(<<)があります
右シフトは連続したビットを右に、左シフトはビットを左にずらします

0010 0110 -右に1シフト-> 0001 0011
0011 0101 -左に2シフト-> 1101 0100

例えばこのように2進ビット列を左右に振ることができます
シフト演算で溢れたビットは抹消されます

ソースコード

前回の課題で学習したビット操作をそのまま使用しました。

メイン関数で、左シフトをbitが8(二進数で1000)より大きくなったら1に戻すことで連続点灯をさせました。点灯間隔は0.1秒にしています。

著者のソースコードでは、for文のカウント変数であるiを左シフトさせていました。

こんなやり方もできるんですね!勉強になります。

左シフトと右シフトを繰り返すLED点灯

ソースコード

少し強引ではありますが、先ほどの問題と同じように右シフトをさせました。

左シフト4回、右シフト4回繰り返すと重なる部分ができてしまいます。

そのため、for文の繰り返しを3回ずつに減らすことで課題通りに点灯させることができました。

著者のソースコードはこちらです。

for文の初期化を利用し、if文と合わせるという使い方は初めて見ました。こちらの方がやはりコードがまとまっていて見やすいですね。

キーボードから入力された数値を2進数でLEDに表示する

ソースコード

個人的にLEDの問題の中で一番簡単でした。scanf,printfを用いてユーザーに数字を入力させるようにしただけです。

著者のソースコードも同じような感じでしたが、

このように、求めてる値以外の入力の時、LEDをすべて消灯させていました。

このような細かい操作もしっかりと書かないといけませんね。

まとめと反省

・Lチカは、ただの点灯だけではなく、いろいろなことが実現できる

・LEDを用いてのビット操作は視覚的に理解しやすく、とてもいい教材になる

・やはりできるだけシンプルに見やすいコードを書くことが大切

次はタクトスイッチを用いた課題に取り組んでいきたいと思います!

ありがとうございました。

タイトルとURLをコピーしました