Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

ラズパイ Python 7セグメント3桁テスト

$
0
0
 Raspberry Piで、3桁の7セグメントLEDをダイナミック点灯させるテストをしました。

 7セグメントLEDを点灯させる方法は、前の記事と同じですが、3桁ですので、1桁ずつ点灯させます。

 GPIO4~6を使い、GPIOが、HIGHの時にLEDのカソードに接続したトランジスタ2SC1815をドライブしてLEDを点灯します。LEDのすべてのセグメントが点灯した場合、約28mAの電流が流れますので、GPIOに直接接続することはできません。

 回路図です。

イメージ 1

 1秒ごとに数字をカウントアップするスクリプトを作り、実験しました。

 1桁の点灯時間は、0.005秒(5ms)としました。ちらつきは、ほとんど気になりません。

イメージ 2

 スクリプトです。

 datetimeモジュールをimportして、秒の値が変わった時にcountをインクリメントし、1秒ごとに0~999までカウントアップします。

 1sごとに割り込みで処理すれば良いのですが、分からないので、こんな方法をとりました。また、Pythonでは、インクリメントに++が使えないので、count +=1でカウントアップしています。

"""
7segment LED test
2017.5.11
JH7UBC Keiji Hata
"""
# -*- coding : utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import datetime
GPIO.setmode(GPIO.BCM)
for i in range(4,7):
    GPIO.setup(i,GPIO.OUT)
for i in range(20,28):
    GPIO.setup(i,GPIO.OUT)
   
seg_data = [63,6,91,79,102,109,125,39,127,111]
disp_data = 0
num100 = 0
num10 = 0
num1 = 0
count =  0
bef_second = 0
for i in range(4,7):
    GPIO.output(i,GPIO.LOW)
def print_7seg(n):
    disp_data = seg_data[n]
    for i in range(20,28):
        GPIO.output(i,disp_data & 1)
        disp_data >>= 1
def num3(num):
    global num100
    global num10
    global num1
    num100 = num // 100
    num10 = (num % 100) // 10
    num1 = num % 10
try:
    while True:
        nowtime = datetime.datetime.today()
        now_second = nowtime.second
        if now_second != bef_second:
            count += 1
            if count > 999:
                count = 0
            num3(count)
        bef_second = now_second
        print_7seg(num100)
        GPIO.output(4,GPIO.HIGH)
        sleep(0.005)
        GPIO.output(4,GPIO.LOW)
        print_7seg(num10)
        GPIO.output(5,GPIO.HIGH)
        sleep(0.005)
        GPIO.output(5,GPIO.LOW)
        print_7seg(num1)
        GPIO.output(6,GPIO.HIGH)
        sleep(0.005)
        GPIO.output(6,GPIO.LOW)
        
except KeyboardInterrupt:
    pass
GPIO.cleanup()
--------------------------------------------------

 PICやArduinoでこのようなプログラムを作ると、シングルタスクマシンですので、これだけしかできません。

 しかし、ラズベリーパイは、基本的にマルチタスクマシンですので、LED表示をさせながら、画面で他のタスクを実行することができます。

 LEDを4桁にすれば、時計を表示させることができます。また、温度計など様々な応用ができると思います。

Viewing all articles
Browse latest Browse all 440

Trending Articles