본문 바로가기
Electronics/Raspberry Pi

[Raspberry Pi] 일정 밝기 이상의 빛이 감지되면 세그먼트에 숫자 출력하기

by 겨울 빛 2020. 12. 30.

import RPi.GPIO as GPIO

import time

import CK_SPI_ADC as spi_adc

import CK_SPI_DEV as spi_dev

import spidev



GPIO.setmode(GPIO.BCM)



ADC_SPI_SS = 8

ADC_CH_LIGHT=0xDF

sensor_chID= ADC_CH_LIGHT



GPIO.setup(ADC_SPI_SS, GPIO.OUT)

GPIO.output(ADC_SPI_SS,1)



spi=spidev.SpiDev()

spi.open(0,0)

spi.max_speed_hz = 5000000



#FND 위치별 핀번호 정의

FND_A     = 2

FND_B     = 3

FND_C     = 4

FND_D     = 5

FND_E     = 16

FND_F     = 12

FND_G     = 18

FND_DP    = 19



#라즈베리파이의 각각의 숫자 자리 핀번호

FND_SEL_1 = 14

FND_SEL_2 = 21

FND_SEL_3 = 22



#위에서 정의한 각각의 값을 리스트 로 묶기

FND_SEG = [FND_A, FND_B, FND_C, FND_D, FND_E, FND_F, FND_G, FND_DP] 

FND_SEL = [FND_SEL_1, FND_SEL_2, FND_SEL_3]



#세그먼트를 출력으로 정의

for fndSeg in FND_SEG :

    GPIO.setup(fndSeg, GPIO.OUT)



#각 자리 숫자를 출력으로 정의

for fndSel in FND_SEL :

    GPIO.setup(fndSel, GPIO.OUT)



#켜지는 fnd 정의

def fndOn():

    for fndSeg in FND_SEG:

        GPIO.output(fndSeg, FND_SEG_ON)

    for fndSel in FND_SEL:

        GPIO.output(fndSel,FND_SEL_ON)



#꺼지는 fnd 정의

def fndOff():

    for fndSeg in FND_SEG:

        GPIO.output(fndSeg, not(FND_SEG_ON))

    for fndSel in FND_SEL:

        GPIO.output(fndSel,not(FND_SEL_ON)) 

       

#세그먼트와 각 자리의 숫자가 0일때 켜지는 값이다.

FND_SEG_ON = 0

FND_SEL_ON = 0



#DELAY 주기

DELAY=0.001



#숫자 0부터 9까지 정의 

#0이 켜짐, 1이 꺼짐

fnd_num=[[0,0,0,0,0,0,1,1],

         [1,0,0,1,1,1,1,1],

         [0,0,1,0,0,1,0,1],

         [0,0,0,0,1,1,0,1],

         [1,0,0,1,1,0,0,1],

         [0,1,0,0,1,0,0,1],

         [0,1,0,0,1,0,0,1],

         [0,0,0,1,1,1,1,1],

         [0,0,0,0,0,0,0,1],

         [0,0,0,0,1,0,0,1]]







try :

    while(1) :

#센서 값을 adc로 받아올 것이며, 받아온 값은 bright 라고 정의

        bright=spi_adc.ck_adcRd(spi_adc.ADC_CH_LIGHT)



#밝기가 150보다 클 때        

        if(bright>150) :

#SEL1은 숫자 8 출력

#이전 숫자를 지우기 위해 fndOff를 사용한다.

          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_1,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[8][i])

            time.sleep(DELAY) 

        

#SEL2는 숫자 5 출력

#이전 숫자를 지우기 위해 fndOff를 사용한다.

          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_2,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[5][i])

            time.sleep(DELAY)



#SEL3은 숫자 4 출력

#이전 숫자를 지우기 위해 fndOff를 사용한다.

          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_3,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[4][i])

            time.sleep(DELAY)



#그렇지 않다면 (조도가 150아래라면),

        else :


#fnd 1,2,3 모두 0이라는 숫자 출력

#이전 숫자를 지우기 위해 fndOff를 사용한다.

          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_1,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[0][i])

            time.sleep(DELAY)

        





          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_2,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[0][i])

            time.sleep(DELAY)







          fndOff()

          for i in range(8):

            GPIO.output(FND_SEL_3,FND_SEL_ON)

            GPIO.output(FND_SEG[i], fnd_num[0][i])

            time.sleep(DELAY)

         







        

except KeyboardInterrupt:

    GPIO.cleanup()

 

(뒤집어져서 당황)

 

댓글