参考にさせていただきました。ありがとうございます。
私はカソードコモンを使いました。また端子は上下にあるものを使いました。
抵抗は1kΩのものを使いました。
* 3番(下側中央)をGNDに接続しています。GNDに接続するのは8番(上側中央)でもいいみたいです。
* 7個のLED(AからG)にそれぞれHigh(点灯)、Low(消灯)を指示することで数字の表示ができます。
* 私の場合は以下のような回路になっています。
7セグLEDのA : GPIO 5
7セグLEDのB : GPIO 13
7セグLEDのC : GPIO 6
7セグLEDのD : GPIO 20
7セグLEDのE : GPIO 21
7セグLEDのF : GPIO 16
7セグLEDのG : GPIO 19
* GPIOの番号は「GPIO: MODELS A+, B+ AND RASPBERRY PI 2」の上側の図の番号体系と同じです。
* プログラム中のled_gpio_dicと対応しておりまして、Value(右側の数字)は何番のGPIOにつないだかによって変更する必要があります。
* またGPIO 24がHigh(スイッチを押したとき)になったら停止するようにしています。
* プログラムはPythonで書きました。
* $ sudo python filename.py
で実行できます。
import RPi.GPIO as GPIO
from time import sleep
# 7seg led position : GPIO
led_gpio_dic = {
"A": 5,
"B": 13,
"C": 6,
"D": 20,
"E": 21,
"F": 26,
"G": 19 }
# number : led position
number_led_dic = {
0: set([chr(c) for c in range(ord('A'), ord('F')+1)]), # A, B, C, D, E, F
1: set(["B", "C"]), # B,C
2: set(["A", "B", "G", "E", "D"]), # A, B, G, E, D
3: set(["A", "B", "C", "D", "G"]), # A, B, C, D, G
4: set(["F", "G", "B", "C"]), # F, G, B, C
5: set(["A", "F", "G", "C", "D"]), # A, F, G, C, D
6: set(["F", "E", "D", "C", "G"]), # F, E, D, C, G
7: set(["A", "B", "C"]), # A, B, C
8: set([chr(c) for c in range(ord('A'), ord('G')+1)]), # A, B, C, D, E, F, G
9: set(["A", "B", "C", "F", "G"]), # A, B, C, F, G
"-": set(["G"]) }
def my_callback(channel):
global done
if channel == 24:
done = True
def show(number):
high_pos_set = number_led_dic[number]
low_pos_set = number_led_dic[8] - high_pos_set
for pos in high_pos_set:
GPIO.output(led_gpio_dic[pos], GPIO.HIGH)
for pos in low_pos_set:
GPIO.output(led_gpio_dic[pos], GPIO.LOW)
# init
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200)
for pos in number_led_dic[8]:
GPIO.setup(led_gpio_dic[pos], GPIO.OUT, initial = GPIO.LOW)
done = False
num = 0
try:
while not done:
show(num % 10)
num += 1
sleep(0.3)
except KeyboardInterrupt:
pass
GPIO.cleanup()
from time import sleep
# 7seg led position : GPIO
led_gpio_dic = {
"A": 5,
"B": 13,
"C": 6,
"D": 20,
"E": 21,
"F": 26,
"G": 19 }
# number : led position
number_led_dic = {
0: set([chr(c) for c in range(ord('A'), ord('F')+1)]), # A, B, C, D, E, F
1: set(["B", "C"]), # B,C
2: set(["A", "B", "G", "E", "D"]), # A, B, G, E, D
3: set(["A", "B", "C", "D", "G"]), # A, B, C, D, G
4: set(["F", "G", "B", "C"]), # F, G, B, C
5: set(["A", "F", "G", "C", "D"]), # A, F, G, C, D
6: set(["F", "E", "D", "C", "G"]), # F, E, D, C, G
7: set(["A", "B", "C"]), # A, B, C
8: set([chr(c) for c in range(ord('A'), ord('G')+1)]), # A, B, C, D, E, F, G
9: set(["A", "B", "C", "F", "G"]), # A, B, C, F, G
"-": set(["G"]) }
def my_callback(channel):
global done
if channel == 24:
done = True
def show(number):
high_pos_set = number_led_dic[number]
low_pos_set = number_led_dic[8] - high_pos_set
for pos in high_pos_set:
GPIO.output(led_gpio_dic[pos], GPIO.HIGH)
for pos in low_pos_set:
GPIO.output(led_gpio_dic[pos], GPIO.LOW)
# init
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200)
for pos in number_led_dic[8]:
GPIO.setup(led_gpio_dic[pos], GPIO.OUT, initial = GPIO.LOW)
done = False
num = 0
try:
while not done:
show(num % 10)
num += 1
sleep(0.3)
except KeyboardInterrupt:
pass
GPIO.cleanup()
【環境】
Raspberry Pi 2 Model B
$ uname -a
Linux raspberrypi 4.0.7-v7+ #801 SMP PREEMPT Tue Jun 30 18:38:23 BST 2015 armv7l GNU/Linux
Enjoy!
0 件のコメント:
コメントを投稿