line monitor > 情報表示部分 (v0.1) > 7seg led > display 0 to 9 and decimal point


line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96
<hr>

http://qiita.com/7of9/items/69763fc0c0634e7dd687
の続き

```txt:動作確認
Raspberry Pi2
7セグメントLED : C-361SR 
抵抗 : 1.1kΩ
```
## やりたいこと
7segment LEDにて0から9の数値とdecimal pointを表示したい。

考慮点

- C-361SRをRPi2に接続するときに、C-361SRのピン番号を若い値(2)から順番に接続する
- RPi2への接続もGPIOの左上(Pin#03)から下方向に接続する

上記について、記憶に頼らずに接続できるように実装を試みる。そうすることで、C-361SRの接続と取り外しが気軽にできるようになる。

なおRPi2に接続時はGND(Pin# 09)と3.3V(Pin# 17)を飛ばさないといけない。この点については、ダミーコネクタをあらかじめRPi2に挿しておくことで、誤接続を回避できるようになる。


## GPIOテーブル

- [GPIO of RPi](http://www.element14.com/community/docs/DOC-73950/l/raspberry-pi-2-model-b-gpio-40-pin-block-pinout)
- [C-361SRのデータシートPDF](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwja--e1hqnJAhUnW6YKHfrgBK0QFggeMAA&url=http%3A%2F%2Fwww.para.com.tw%2Fuploads%2Fpdf%2FC-361SR%2520BR.pdf&usg=AFQjCNHOy93J7ypbU3jTesUPSD2q9r0mqQ&sig2=S52ZQoid-r9eehkirKih7g&bvm=bv.108194040,d.dGY)


上記の接続に関する考慮点とC-361SRのデータシートから以下のようにテーブルを作成した

| 7seg a..DP | 7seg Pin# | RPi2 GPIO Pin# |
|:-----------|:-----------|:------------|
| a | 10 | 21 |
| b | 9 | 19 |
| c | 8 | 15 |
| d | 5 | 11 | 
| e | 4 | 07 |
| f | 2 | 03 |
| g | 3 | 05 | 
| DP(h) | 7 | 13 |

7seg Pin# の1,6はコモン。

## プログラム

[7segLED_IPadrDisplay v0.1](https://github.com/yasokada/python-151127-7segLed_IPadrDisplay/releases/tag/v0.1)

プログラムは以下から成り立つ

- IPadrDisplay.py : メインプログラム
- dummyGPIO.py : RPi2コードをCentOS上で実行するためのダミー
- util7SegLED.py : 7segmend LED関連のコード

### メインプログラム　

```IPadrDisplay.py
from util7SegLED import info7seg_init, info7seg_on
import time

'''
v0.1  2015/11/28
  - display 0..9 and decimal point
'''

while True:
	info7seg_init()
	for idx in range(0, 11):
		info7seg_on(idx)
		time.sleep(2)
```

2秒おきに、0..9とdecimal pointを表示する。


### 7segment LED display

```util7SegLED.py
#import time

#--- selection of import based on the package ---
''' 1. with RPi.GPIO'''
import RPi.GPIO as GPIO
''' 2. without RPi.GPIO'''
#from dummyGPIO import CDummyGPIO
#GPIO = CDummyGPIO()
#-----------------

GPIO.setmode(GPIO.BOARD)

#-------------------
#[User Configuration]
# (Change according to the cable connections)
#
# Pin # of RPi2
#  to Pin# of 7seg LED a..h
#
# > case.1 assignment so that user can connect starting from #2
#   of C-361SR to left upper pin of RPi2 GPIO port
pinnum=[21, 19, 15, 11, 07, 03, 05, 13]


#-------------------
#[Do no change followings]
# onoff bit (7segment led > a..g)
onoff=[ 
[True,  True, True, True,  True,      True,  False, False ], # disp 0
[False, True, True, False, False,     False, False, False ], # disp 1
[True,  True, False, True,  True,      False,  True, False ], # disp 2
[True,  True, True,  True, False,      False, True, False], # disp 3
[False, True, True, False, False,      True, True,  False ], # disp 4
[True, False, True, True, False,       True,  True, False], # disp 5
[True, False, True, True,  True,       True, True, False], # disp 6
[True, True, True, False, False,       True, False, False], # disp 7
[True, True, True,  True,  True,       True, True, False], # disp 8
[True, True, True,  True,  False,       True, True, False], # disp 9
[False, False, False, False, False,     False, False, True], # disp .
]
# TODO: 0z > add out of range display
# TODO: 0z > add all off function
#-------------------

def info7seg_init():
	for idx in range(0, len(pinnum)): 
		GPIO.setup(pinnum[idx], GPIO.OUT) # a..h

def info7seg_on(number):
	for idx in range(0, len(pinnum)): # a..h
		GPIO.output(pinnum[idx], onoff[number][idx])
```

上記においてユーザが変更するとしたら、pinnum[]への割り当て。

onoff[]は7segment LEDのaからgとDPのON,OFF割当て。こちらはC-361SR(
と同等品）を使う限りは変更しなくていい。


## 写真

### RPi2接続部分

![DSC_0006.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/3f0d9f00-76ee-6044-36b0-1fb752dc99b0.jpeg)

### 7segument LED

![DSC_0007.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/7466a09b-49f9-4f4f-03d9-e5113555253f.jpeg)

1.1kΩを接続

### 表示例(5)

![DSC_0005.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/14b89e0e-0440-076c-3938-f35111fe96b2.jpeg)

"5"を表示している。ただし、ケーブルが２本足りなかったので、右上と上部は点灯しない状態。

<hr>
(追記)

### シールドタイプ

ケーブルをはやしても見にくいため、シールドタイプにした。

![DSC_0010.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/bb810b94-01cf-c564-48be-662f7d9d95f8.jpeg)

使用したもの

- 7セグメントLED : C-361SR
- 抵抗 : 1.1kohm x 8
- 基盤 : ICB-88 (Sunhayato)
- ピンヘッダ : MIL規格、I型20P

シールドタイプにしたところ、ケースの上蓋がしまらなくなった。
また、抜き差しは確かにできるが、ケースがついたままだと抜きにくいため、抜くときはケースをバラすことになる。


以下のページのようなピンヘッダを間にかませば、シールドそのものをケースの外に出せるかも。
http://cranberrytree.blogspot.jp/2014/12/raspberry-pi-b40.html

そうなるとシールドを抜き差ししやすいだろうか。

### シールドタイプ v0.2
(追記 2015/11/29)

ピンヘッダを間に入れる方法に変更した。
また、GNDピンをジャンパで切断できるように変更。これで、LEDを表示しない時はジャンパをずらせばいい。

![DSC_0011.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/76b39dae-6f56-8057-0836-175ac9d707d2.jpeg)

ピンヘッダでオス・メス変換した後。
ケースの上部に出ていて、シールドを抜き差ししやすい。
また、クリアケースの蓋の開け閉めにも支障がない。

![DSC_0014.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/a38f3312-1581-fee2-f832-84a014eaaa88.jpeg)

7セグLED接続の３形態。
上から順番に作成してきた。

![DSC_0015.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/a668b043-b2bc-cd29-b658-394e3c51c81b.jpeg)

裏返した所。
もうちょっと細い線で実装してもよかったかもしれない。
使用した線はAWG24.

![DSC_0017.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/e63135dc-9086-7db9-6d4b-975467d33c15.jpeg)