Застрял на функции

Привет,

Я использую 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

Откуда ChangeDutyCycle? Вероятно, это блокирующий вызов.

ricekab 15.12.2020 12:57

Можете ли вы показать свой вывод из терминала?

Daniel 15.12.2020 12:58

Ваш цикл while вызывает lock как можно чаще, если введенный код неверен. Может ли это быть проблемой с servo.ChangeDutyCycle?

bjhend 15.12.2020 13:01

@ricekab я использую этот исходный код

Al- 15.12.2020 13:02

@Daniel нет вывода, он просто застрял

Al- 15.12.2020 13:02

Не могли бы вы также исправить отступ в исходном вопросе? Тогда мы сможем увидеть, возможно, это ошибка отступа.

ricekab 15.12.2020 13:04

@bjhend что servo.ChangeDutyCycle сделать, насколько я понимаю, это то, что он будет поворачивать ротор, используя значение от 0 до 12, 0 поворачивает его на 0 градусов, а 12 - на 180 градусов.

Al- 15.12.2020 13:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
236
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы проверяете, равен ли ввод (строка) 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

О боже, забыл об этой части. ошибка новичка лол

Al- 15.12.2020 13:11

@Ossiris Значит, вы не застряли на функции lock(), вместо этого вы не смогли ввести действительный код?

bjhend 15.12.2020 15:07
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() 

Другие вопросы по теме