自力でLチカ4〜7つのLED2〜
2024年6月28日(金)は、5割ほどの出席率でした。中学校のテストが近いようで、お休みが多い日でした。ということは、出席したメンバーはいつもより手厚いサポートが受けられるサービスデーです。前回に引き続き、RaspberryPi Pを使って7つのLEDをプログラミングします。
- 18時00分~18時20分 タイピング練習
- 18時20分~18時35分 マウス練習
- 18時35分~19時50分 7つのLチカ
- 19時50分~20時00分 あとかたづけ
Contents
タイピング練習とマウス練習
タイピングの練習は、「寿司打」、マウスの練習は「ソリティア」です。
- 寿司打
https://sushida.net - ソリティア(クロンダイク)
https://playingcards.jp/solitaire/klondike/
マウス練習で取り入れたソリティアは、お父さん方やわたしにとっては青春のゲームです。「実験の反応待ち時間にずっとやってた」「寝る前にはじめたら徹夜でやってしまった」などなど、エピソードに事欠かないゲームです。
タッチデバイスが一般的になって、マウス操作を知らない子供たちが増えてきました。まだまだマウスは現役です。お父さんは、マウス練習がてらお子さんと一緒にソリティアで遊んでみてはいかがでしょうか。
LED7つを点灯させるプログラムを考える
ここのところ続けて7つのLEDを光らせるプログラミングに挑戦しています。
お題を再掲します。以下のとおりです。
- ブレットボードに配線する
- プログラムを作成する
○●●●●●●(LEDを1つ点灯する)
○○●●●●●(1秒後にLEDを2つ点灯する)
○○○○○○○(1秒後にLEDを7つ点灯する)
●●●●●●●(1秒後にLEDをすべて消灯する)
(1秒後に最初から繰り返し)
実体配線を協力して完成させよう
メンバーの何人かは、前回までで実体配線を完成させてきました。熱心に、自宅で完成させてきたメンバーもいます。
他のメンバーより早くできたメンバーは、遅いメンバーに教えます。
実は、この教えるということが自分の力をのばすことにつながります。
他人に教えるには、自分がしっかりと理解していないとできません。そして、教えているうちに自分の理解も深まるのです。決して、中原が手抜きをしているのではありません。
冗談はともかく、メンバー同士だと、わたしが示すのとはちがった視点で課題に向き合えます。答えが一つだったとしても、答えにたどり着く道はたくさんあります。どの道を通っても良いのです。
プログラムを考える
今回でおおむねメンバー全員が実体配線をおえて、プログラム作成に取り組みました。
わたしからの指示は、「なにを見てもいい、教え合ってもいいから要求を満たすプログラムを書くこと」です。
この指示にとまどっているメンバーもいました。プログラムコード自体に唯一絶対の正解はありません。用意された答えを探すのではなくて、自分で答えを作っていくのがプログラムです。だれかに教えられた答えに価値なんてないのです。
さて、LEDが増えるとプログラムも複雑になります。それでも6割くらいのメンバーが答えにたどり着いた模様です。
ちなみに、多くのメンバーがわたしがいい加減に書いた下のようなコードを書いていました。
from machine import Pin
import time
led1 = Pin(12, Pin.OUT)
led2 = Pin(13, Pin.OUT)
led3 = Pin(14, Pin.OUT)
led4 = Pin(15, Pin.OUT)
led5 = Pin(16, Pin.OUT)
led6 = Pin(17, Pin.OUT)
led7 = Pin(18, Pin.OUT)
while True :
led1.value(1)
time.sleep(1)
led2.value(1)
time.sleep(1)
led3.value(1)
led4.value(1)
led5.value(1)
led6.value(1)
led7.value(1)
time.sleep(1)
led1.value(0)
led2.value(0)
led3.value(0)
led4.value(0)
led5.value(0)
led6.value(0)
led7.value(0)
time.sleep(1)
もちろん、このプログラムコードでも要求を満たします。一つの答えです。
このコードの問題点は以下です。
- 全体に冗長で読みにくい
- 変更に弱い
ひとつずつ解説します。全体に冗長というのは、同じような記述がつづいているとも言いかえられます。もっと省略して書けると全体の見通しが良くなると思われます。
今回は、仕様が先に決められていてプログラムを書きました。しかし、場合によっては逆にプログラムから仕様を読みとることもあります。
このプログラムを見て、どんな仕様なのかわかりやすいと言えるでしょうか? せっかくPythonという高水準言語を使っているのですから、人間が読んでも理解しやすいコードにしたいのです。
もうひとつ、変更に弱いとはどういうことでしょうか。
たとえば、LEDの光らせ方を「1→2→7→0の繰り返し」から「3→1→0→6→7→5の繰り返し」に変更すると、どのようなプログラムになるでしょうか。おそらくコピペを繰り返すことになるのではないでしょうか。
しかも、どこにコードを書いたらいいかな?と考えながら単純なコピペを繰り返すのです。だいたいこれがエラーのもとです。
このお題は、次にやりたいことがあるので、それを実現するための準備練習です。次にやりたいことを実現しやすくするために、やっつけ仕事ではなく、活用しやすいコードを書かなければなりません。
次回は、これらの問題点を克服したコードを書いていきます。