自力でLチカ6〜いよいよサイコロプログラム〜

2024年7月12日(金)は、6割ほどの出席率でした。今回はいよいよサイコロプログラム作成に挑戦します。

  • 18時00分~18時20分 タイピング練習
  • 18時20分~18時35分 マウス練習
  • 18時35分~19時50分 サイコロプログラム
  • 19時50分~20時00分 あとかたづけ

タイピング練習とマウス練習

タイピングの練習は、「寿司打」、マウスの練習は「ソリティア」です。

今回はメンバーの調子が良くなかったようで、記録は伸びず。

こんな日もあります。練習の成果は直線上に現れるのではなくて、上下しながら長期的に上昇していくものです。あせらず、正しい練習方法を続けることが力になるのです。

LED7つを使ったサイコロプログラム制作する

前回までで、サイコロを表示するプログラムの輪郭が見えてきました。今回は、サイコロプログラム制作に挑戦です。

自力でLチカ3〜7つのLED〜

2024年6月21日(金)は、7割ほどの出席率でした。前回に引き続き、RaspberryPi Pを使ってLチカをプログラミングします。 タイピング練習とマウス練習 タイピングの練習は…

自力でLチカ4〜7つのLED2〜

2024年6月28日(金)は、5割ほどの出席率でした。中学校のテストが近いようで、お休みが多い日でした。ということは、出席したメンバーはいつもより手厚いサポートが受け…

自力でLチカ5〜コードは短く読みやすく〜

2024年7月5日(金)は、5割ほどの出席率でした。今回も、お休みが多い日でした。先週につづき、手厚いサポートが受けられるサービスデーです。前回に引き続き、RaspberryP…

前回、7つのLEDを光らせるプログラムを書きました。最終的に、冗長性を解消して読みやすく再利用しやすく書いたコードが下記です。

from machine import Pin
import utime

pin_no = [12, 13, 14, 15, 16, 17, 18]
leds = [Pin(pin_no[i], Pin.OUT) for i in range(7)]

blink_pattern =[[1, 0, 0, 0, 0, 0, 0],
               [1, 1, 0, 0, 0, 0, 0],
               [1, 1, 1, 1, 1, 1, 1],
               [0, 0, 0, 0, 0, 0, 0]]

def blinkLED(pattern):
    for i in range(len(pattern)):
        for j in range(7):
            leds[j].value(pattern[i][j])
        utime.sleep(1)

while True :
    blinkLED(blink_pattern)

このコードのハイライト部分で、つまづくメンバーがたくさんいました。utime.sleep(1)は、for i in range(len(pattern)):のループの中に入れる必要があります。インデント(字下げ)が一段なく、以下のように書いたらうまく動きません

def blinkLED(pattern):
    for i in range(len(pattern)):
        for j in range(7):
            leds[j].value(pattern[i][j])
    utime.sleep(1)

失敗したメンバーのLEDの光り方を見ると、ほんの一瞬だけLEDが光ります。Python(MicroPython)は、インデント(字下げ)が重要な意味を持ちます。軽んじることなく、インデントを入れてください。

プログラムだけでなく、電気回路も十分見直そう

そして、失敗例が多かったのは、配線ミスです。回路図で描くと以下のように極めてシンプルな回路です。

しかし、実体配線は下の写真のようになることもあります。

そこで多かったのが、LEDの極性を反対に接続していたミスです。LEDは点灯する極性(プラスマイナスの方向)が決められています。LEDをよく見ると足の長さが違います。LEDを正しく点灯させるには、足の長いほうをプラスにつなぎ、足の短い方をマイナス(GND)につなぎます。

この工作だけでなく、LEDの基本なのでおさえておきましょう。

サイコロプログラムに使える形に書き換える

サイコロプログラムは、以前スペシャルな先生用意してくれたサイコロプログラムを応用します。

サイコロを作ろう~答えは一つじゃない!~

2024年5月10日(金)は、6割ほどの出席率でした。中原が留守のため、スペシャルな先生をおまねきして活動しました。 Contents1 タイピング練習2 マウス練習~ダブルクリッ…

コードは以下の通りです。

import random
from machine import Pin
import time

pin_no = [12, 13, 14, 15, 19 ,17, 18]

leds = [Pin(pin_no[i], Pin.OUT) for i in range(7)]

#1~6の数字に対応した目を配列で指定する
POINT_NUM =[[0, 0, 0, 1, 0, 0, 0],
            [1, 0, 0, 0, 0, 0, 1],
            [1, 0, 0, 1, 0, 0, 1],
            [1, 1, 0, 0, 0, 1, 1],
            [1, 1, 0, 1, 0, 1, 1],
            [1, 1, 1, 0, 1, 1, 1]]

#プログラムで使う関数を定義(はじまり)///////////////////////////////////////////////////////

def blinkLED(num, pattern):
    for i in range(7):
        leds[i].value(0)
    for i in range(7):
        leds[i].value(pattern[num-1][i])

# ボタンが押された時の処理をする関数
def dice():
    # ランダムな整数を生成して、表示する
    num = random.randint(1,6)
    print('num:',num)
    blinkLED(num, POINT_NUM)

#プログラムで使う関数を定義(おわり)/////////////////////////////////////////////////////////


while True :
    dice()
    time.sleep(2)

ここまでマジメに取り組んでいれば、難しいことはないコードです。ほぼすべてが2回目の登場です。

このサイコロプログラムを動かすと、2秒ごとにサイコロの目が変わるようにLEDが点灯します。

……おもしろくありませんよね。

次回、もっと射幸心をあおるプログラム・電子工作にしたいと思います。