BASIC4MCU | 질문게시판 | 라즈베리파이 스텝모터를 사용한 자동 블라인드
페이지 정보
작성자 glaemfdj 작성일2021-08-02 19:09 조회3,188회 댓글1건본문
현재 파이어베이스에서 up / down / stop 세가지 형태로 바뀌는 blind_control값을 실시간으로 받아와 블라인드를 제어하려하고있습니다.
blind_control 값이 up일 때는 블라인드가 시계방향으로 계속 돌아가게하고, down일 때는 반시계방향으로 계속 돌아가게하고,
stop일 때는 블라인드가 멈추도록 하려고 합니다.
근데 제가 짠 코드는 파이어베이스의 값을 실시간으로 받아오지 못하고 처음에 지정된 값만 실행합니다.
(예를 들어, blind_control이 up으로 지정되어있고 실행시키면 계속 시계방향으로만 돌아가고 파이어베이스의 값이 stop으로 바꿔도 값을 받아오지 못하는거같음.)
코드를 어떻게 짜야할까요....? 도움주시면 감사하겠습니다...!
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from RpiMotorLib import RpiMotorLib
import time
GPIO_pins = (14, 15, 18)
direction = 20
step = 21
distance = 240
mymotortest = RpiMotorLib.A4988Nema(direction, step, GPIO_pins, "A4988")
# 파이어베이스 연결
if not firebase_admin._apps:
cred = credentials.Certificate("capstone-design-84fbc-firebase-adminsdk-km2be-283d5ced7f.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://capstone-design-84fbc-default-rtdb.firebaseio.com/'
})
# 파이어베이스 blind_control 값을 box_ref에 저장
ref = db.reference('aa')
box_ref = ref.child('Control').child('blind_control')
# up 함수
def up():
while True:
mymotortest.motor_go(False, "Full", distance, 0.01, False, 0)
# down 함수
def down():
while True:
mymotortest.motor_go(True, "Full", distance, 0.01, False, 0)
# 실행 부분
while True:
state = box_ref.get()
print(state)
time.sleep(1)
if state == 'up':
up()
print('up')
elif state == 'down':
down()
print('down')
elif state == 'stop':
print('stop')
break
댓글 1
조회수 3,188master님의 댓글
master 작성일
def up():
def down():
up,down 함수는 있는데 stop 함수가 안보입니다.
stop 함수를 추가하고
elif state == 'stop':
stop() <-- 함수를 호출하세요
print('stop')
break