時計やセンサーの値をリアルタイムで表示させる勉強として、4桁の7セグを扱ってみました。
Pythonでダイナミック点灯させます。こんな感じ↓↓↓
1桁の7セグの記事はこちら
#動作環境
Raspberry Pi 4 Model B
Python3.7.3
#準備するもの
- 4桁7セグメント (今回は、白色の A-574SR-LF B/W を使用)
- 抵抗 (白色の場合は、330Ω)
- ブレッドボード
- ジャンパ線
#配線
A-574SR-LF B/W での7セグのピン番号とGPIOのポート番号は以下の通りです。
- 桁数側
7セグ ピン番号 | 12 | 9 | 8 | 6 |
---|---|---|---|---|
GPIO | 11 | 13 | 15 | 16 |
- 数字盤側
| 7セグ ピン番号 | 11(A) | 7(B) | 4(C) | 2(D) | 1(E) | 10(F) | 5(G) | 3(DP) |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| GPIO | 31 | 33 | 35 | 37 | 40 | 32 | 36 | 38 |
#プログラム
###好きな4桁の整数を表示させるプログラム
クリックすると開きます
7seg4_A.py
import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
segmentpins = [31,33,35,37,40,32,36,38] #数字盤側
digitpins = [16,15,13,11] #桁数側
GPIO.setup(segmentpins, GPIO.OUT)
GPIO.setup(digitpins, GPIO.OUT)
numbers = [
#a,b,c,d,e,f,g,p
[1,1,1,1,1,1,0], #0
[0,1,1,0,0,0,0], #1
[1,1,0,1,1,0,1], #2
[1,1,1,1,0,0,1], #3
[0,1,1,0,0,1,1], #4
[1,0,1,1,0,1,1], #5
[1,0,1,1,1,1,1], #6
[1,1,1,0,0,1,0], #7
[1,1,1,1,1,1,1], #8
[1,1,1,0,0,1,1], #9
]
def displayNumber(n):
ns = numbers[n]
for i,n in enumerate(ns):
n = 1 if n == 0 else 0
GPIO.output(segmentpins[i],n)
def displayNumbers(vs):
for i in range(4):
GPIO.output(digitpins[i], 1)
displayNumber(vs % 10)
digitalclear()
GPIO.output(digitpins[i], 0)
vs = vs // 10
def digitalclear():
for i in range(8):
GPIO.output(segmentpins[i], 1)
no = int(input(“表示する値を入力してください”))
while True:
displayNumbers(no)
GPIO.cleanup()
###好きな4桁の小数を表示させるプログラム
!14.62など整数2桁、小数2桁の形で入力!
クリックすると開きます
7seg4_B.py
import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
segmentpins = [31,33,35,37,40,32,36] #数字盤側
digitpins = [16,15,13,11] #桁数側
GPIO.setup(segmentpins, GPIO.OUT)
GPIO.setup(digitpins, GPIO.OUT)
numbers = [
#a,b,c,d,e,f,g,p
[1,1,1,1,1,1,0,0], #0
[0,1,1,0,0,0,0,0], #1
[1,1,0,1,1,0,1,0], #2
[1,1,1,1,0,0,1,0], #3
[0,1,1,0,0,1,1,0], #4
[1,0,1,1,0,1,1,0], #5
[1,0,1,1,1,1,1,0], #6
[1,1,1,0,0,1,0,0], #7
[1,1,1,1,1,1,1,0], #8
[1,1,1,0,0,1,1,0], #9
]
def displayNumber(n,dot = False):
ns = numbers[n]
for i,n in enumerate(ns):
n = 1 if n == 0 else 0
GPIO.output(segmentpins[i],n)
v = GPIO.LOW if dot else GPIO.HIGH
GPIO.output(segmentpins[7], v)
def displayNumbers(no):
no = int( no * 100 ) #小数を整数にして表示している
for i in range(4):
GPIO.output(digitpins[i], 1)
dot = True if i==2 else False #小数点の位置は、i==の値を変える
displayNumber(no % 10, dot)
digitalclear()
GPIO.output(digitpins[i], 0)
no = no // 10
def digitalclear():
for b in range(8):
GPIO.output(segmentpins[b], 1)
no = int(input(“表示する値を入力してください”))
while True:
displayNumbers(no)
GPIO.cleanup()
#参考サイト
4桁7セグメントLEDで始めるArduino