PiFaceCAD에 친숙해지기 위해 Python으로 스코어보드를 만들어보는 숙제가 있었다. LCD에 두 팀의 점수를 보여주는 기능을 하며, 각 팀의 점수를 올리기 위한 스위치 한 개 씩과, 점수를 리셋하는 용도의 스위치 한 개를 사용한다.
위의 영상과 같이 동작하며, 내가 짠 코드는 다음과 같다. (먼저 셋업이 필요하다)
#!/usr/bin/python3
import pifacecad
cad = pifacecad.PiFaceCAD()
cad.lcd.backlight_on()
def show():
cad.lcd.clear()
cad.lcd.write('A team:' + str(score[0]) + '\n'
+ 'B team:' + str(score[1]))
score = [0, 0]
show()
while True:
if cad.switches[0].value == 1:
score[0] = score[0] + 1
while cad.switches[0].value == 1: pass
show()
elif cad.switches[1].value == 1:
score[1] = score[1] + 1
while cad.switches[1].value == 1: pass
show()
elif cad.switches[4].value == 1:
score = [0, 0]
while cad.switches[4].value == 1: pass
show()
스위치를 한 번 누르는 동안 여러 점이 올라가는 것을 막기 위해, 손을 뗄 때까지 pass시키는 작은 while 문을 넣었다. 다른 사람들은 time.sleep()을 사용해서 처리했다. 이때, 일반적으로 0.25 초 정도의 sleep이 적당하다고 한다.
작성해놓고 보니 while 블록에서 중복으로 나타나는 것들을 정리하고 싶어져서 아래와 같이 바꾸었다.
#!/usr/bin/python3
import pifacecad
cad = pifacecad.PiFaceCAD()
cad.lcd.backlight_on()
def show():
cad.lcd.clear()
cad.lcd.write('A team:' + str(score[0]) + '\n'
+ 'B team:' + str(score[1]))
def listen(i, func):
global score
if cad.switches[i].value == 1:
if func == 'add': score[i] = score[i] + 1
elif func == 'reset': score = [0, 0]
while cad.switches[i].value == 1: pass
show()
score = [0, 0]
show()
while True:
listen(0, 'add')
listen(1, 'add')
listen(4, 'reset')
다음의 코드는, 위쪽에 붙은 로커 스위치를 테스트해보기 위해 수정한 버전이다.
#!/usr/bin/python3
import pifacecad
cad = pifacecad.PiFaceCAD()
cad.lcd.backlight_on()
def show():
cad.lcd.clear()
cad.lcd.write('A team:' + str(score[0]) + '\n'
+ 'B team:' + str(score[1]))
def listen(i, func, team=None):
global score
if cad.switches[i].value == 1:
if func == 'add': score[team] = score[team] + 1
elif func == 'reset': score = [0, 0]
while cad.switches[i].value == 1: pass
show()
score = [0, 0]
show()
while True:
listen(5, 'reset')
listen(6, 'add', 0)
listen(7, 'add', 1)
댓글 없음:
댓글 쓰기