Привет,
Я использую SG90 Micro Servo для имитации дверного замка, когда дверь открывается после ввода пароля.
Я пытаюсь сделать так, чтобы программа запускалась с поворотом сервопривода на угол 90 градусов, чтобы он выглядел как его замок, а затем, если код правильный, он поворачивается на 0 градусов и примерно через 10 секунд возвращается к 90 градусам. .
Проблема в том, что сервопривод застрял на функции lock()
в начале и unlock()
и не продолжает выполнять программу.
Что я могу сделать в этой ситуации? Спасибо
дверной замок.py
import time
import RPi.GPIO as GPIO
from servo import *
code = 1234
try:
while True:
lock() # The rotating thingy is at 90 degree
pass_code = input("")
if pass_code == code:
print("Opening the door")
unlock() # The rotating thingy is at 0 degree
time.sleep(10)
print("Locking the door")
lock() # The rotating thingy is back at 90 degree
except KeyboardInterrupt:
servo.stop() # or lock(), Im not sure
серво.py
def unlock():
servo.ChangeDutyCycle(7) # The rotating part is at 180 degree
def lock():
servo.ChangeDutyCycle(0) # The rotating part is at 90 degree
Можете ли вы показать свой вывод из терминала?
Ваш цикл while
вызывает lock
как можно чаще, если введенный код неверен. Может ли это быть проблемой с servo.ChangeDutyCycle
?
@ricekab я использую этот исходный код
@Daniel нет вывода, он просто застрял
Не могли бы вы также исправить отступ в исходном вопросе? Тогда мы сможем увидеть, возможно, это ошибка отступа.
@bjhend что servo.ChangeDutyCycle
сделать, насколько я понимаю, это то, что он будет поворачивать ротор, используя значение от 0 до 12, 0 поворачивает его на 0 градусов, а 12 - на 180 градусов.
Вы проверяете, равен ли ввод (строка) int 1234. Вы можете преобразовать ввод строки в целые числа, используя int(input())
import time
import RPi.GPIO as GPIO
from servo import *
code = 1234
try:
while True:
lock() # The rotating thingy is at 90 degree
pass_code = int(input()) //casting the string to integer
if pass_code == code:
print("Opening the door")
unlock() # The rotating thingy is at 0 degree
time.sleep(10)
print("Locking the door")
lock() # The rotating thingy is back at 90 degree
except KeyboardInterrupt:
servo.stop() # or lock(), Im not sure
О боже, забыл об этой части. ошибка новичка лол
@Ossiris Значит, вы не застряли на функции lock()
, вместо этого вы не смогли ввести действительный код?
try:
while True:
lock()
pass_code = input("")
if pass_code == code: # you dont need indentation here
print("Opening the door")
unlock()
time.sleep(10)
print("Locking the door")
lock()
except KeyboardInterrupt:
servo.stop()
Откуда
ChangeDutyCycle
? Вероятно, это блокирующий вызов.