LoginSignup
5
4

More than 1 year has passed since last update.

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

Posted at

時計やセンサーの値をリアルタイムで表示させる勉強として、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

5
4
0

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
  3. You can use dark theme
What you can do with signing up
5
4