タイトルの通り、好きな数字を入力したら、7セグに出力されるものを作ります。
#使用したもの
- Raspberry Pi 4 Model B
- ブレッドボード
- ジャンパ線
- 赤色7セグ(A-551SRD)
#1. 配線する
下の画像のように、ジャンパ線を使いつなげていきます。
7セグの足とGPIOのポート間は以下の通りです。
- 十の位
7セグの足 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
GPIO | 22 | 18 | 電源線 | 16 | 省略 | 7 | 11 | 電源線 | 13 | 15 |
- 一の位
7セグの足 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
GPIO | 32 | 36 | 電源線 | 38 | 省略 | 37 | 35 | 電源線 | 33 | 31 |
#2. プログラム
SSHの場合は、sudo nano でファイルを作成します。
言語はpythonを使いました。
7seg_anyvalue.py
import RPi.GPIO as GPIO
from time import sleep
i = int(input('表示する値を入力してください:'))
GPIO.setmode(GPIO.BOARD)
ports1 = [
11, 7,16,18,22,13,15,12]
ports2 = [
35,37,38,36,32,33,31,40]
GPIO.setup(ports1, GPIO.OUT)
GPIO.setup(ports2, GPIO.OUT)
numbers = [
[1,1,1,1,1,1,0,0], #0
[0,1,1,0,0,0,0,0],
[1,1,0,1,1,0,1,0],
[1,1,1,1,0,0,1,0],
[0,1,1,0,0,1,1,0],
[1,0,1,1,0,1,1,0],
[1,0,1,1,1,1,1,0],
[1,1,1,0,0,1,0,0],
[1,1,1,1,1,1,1,0],
[1,1,1,0,0,1,1,0],
[0,0,0,0,0,0,0,0], #10
]
def show_num(no):
l = int(no / 10)
r = int(no % 10)
ns = numbers[r]
for i, n in enumerate(ns):
n = 1 if n == 0 else 0
GPIO.output(ports2[i], n)
ns = numbers[l]
for i, n in enumerate(ns):
n = 1 if n == 0 else 0
GPIO.output(ports1[i], n)
try:
while True:
show_num(i)
sleep(10)
print('表示なう')
except KeyboardInterrupt:
pass
GPIO.cleanup()
実行すると、表示させたい値を聞かれるので入力、7セグに反映されます。
その後は、10秒毎に「表示なう」がPC側に出ます。
終了したい場合は、「control」+「C」で終わります。
#応用
7セグの数を増やして、計算機が作れそうだと思いました。
また、タクトスイッチを押すと、ランダムに値が出るなども、おもしろそうです。
7セグの世界も深いですね。
#参考図書
クジラ飛行机 著
「やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう」
ーマイナビ出版
※ 本記事では上記の図書を参考に、改良して使わさせていただきました。