LoginSignup
3

More than 1 year has passed since last update.

posted at

4桁の7セグをラズパイで動かす

時計やセンサーの値をリアルタイムで表示させる勉強として、4桁の7セグを扱ってみました。
Pythonでダイナミック点灯させます。こんな感じ↓↓↓
IMG_0364.jpeg

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3