Контакты Raspberry Pi GPIO застряли в режиме In и High

Я использую Raspbian Stretch на Raspberry Pi 2. Я пытался построить базовый марсоход для предотвращения препятствий и столкнулся с проблемой с двигателями. Схема находится здесь:

У меня нет преобразователя постоянного тока в постоянный, и у меня есть светодиод с резистором 330 Ом, подключенным к выводу 17.

Я использовал этот код для его запуска:

from gpiozero import LED
from gpiozero import Motor
import RPi.GPIO as GPIO
from time import sleep

# prereqs
GPIO.setmode(GPIO.BCM)
Motorbin = 5
Motorbout = 6
GPIO.setup(Motor2in,GPIO.OUT)
GPIO.setup(Motor2out,GPIO.OUT)

led = LED(17)

for i in range(2):
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)



# motors are going to start running now

motora = Motor(27, 22)
motora.forward()
sleep(5)
motora.backward()
sleep(5)
motora.stop()

for i in range(2):
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)

motorb = (5, 6)
motorb.forward()
sleep(5)
motorb.backward()
sleep(5)
motorb.stop()

GPIO.cleanup

Я запустил код, и мой светодиод дважды мигнул, первый двигатель (motora) двигался вперед и назад, а второй двигатель (motorb) вообще не двигался. Я выполнил команду терминала «gpio readall» и обнаружил, что контакты, на которых работает мой второй двигатель (BCM 5, 6), были установлены на «IN», а оба были установлены на «1».

конечный вывод gpio readall

Я попытался использовать команду GPIO.setup, чтобы изменить контакты 5 и 6 на выходные контакты, но они все равно остались прежними. Я также попытался использовать команду терминала, чтобы изменить вывод контактов с высокого на низкий, но ничего не произошло. Контакты GPIO, кажется, застряли в этом режиме.

Есть ли способ исправить эти застрявшие контакты GPIO? И правильно ли я поступаю в этом случае?

Любая помощь будет принята с благодарностью!


person themadcoderz    schedule 23.04.2018    source источник
comment
Может быть, попробовать на raspberry pi SE?   -  person Stedy    schedule 23.04.2018


Ответы (1)


Ваш код настраивает двигатель A с помощью

motora = Motor(27, 22)

Но мотор B настроен

motorb = (5, 6).

Разве это не должно быть настроено аналогичным образом

motorb = Motor(5, 6)?
person tlfong01    schedule 25.04.2018
comment
Да, спасибо, что вы это заметили, это была моя глупая ошибка. Оба моих мотора после этого заработали. - person themadcoderz; 25.04.2018
comment
Это не глупая ошибка. Это обычное дело для новичков в Python и ООП. Когда я читаю инструкцию motora = Motor (27, 22), я вижу объект motor с выводами 27, 22 gpio класса Motor с методами вперед и т. Д. Когда я читаю motorb = (5, 6), я вижу кортеж motorb с двумя целыми числами 5, 6 (не номера пинов gpio!). Для этого кортежа вы можете обработать два целых числа, но вы не можете попросить кортеж управлять двигателем за вас! Так что, если вы не видите смысла слов в утверждениях, вам будет трудно уловить разницу. - person tlfong01; 28.04.2018