Повторяющийся процесс инициализации для широтно-импульсной модуляции на Raspberry Pi - PullRequest
0 голосов
/ 09 января 2020

Повторяющийся процесс инициализации для широтно-импульсной модуляции на Raspberry Pi

В настоящее время я работаю над использованием широтно-импульсной модуляции с python на малиновом pi 3 b + для управления роботом c машина. Этот автомобиль, однако, требует некоторой калибровки, для которой я написал этот код. Цель этого кода - постоянно запрашивать ввод tl или tr, повернуть налево или повернуть направо и установить таймфрейм. Затем запускается функция, которая поворачивает робота вправо или влево.

Он работает с куском кода, Код 1, однако он будет запускаться только один раз и перемещать робота, а после этого он просто запросит входы, но не будет двигаться робот. С другой стороны, я написал фрагмент кода, Code 2, который, как я думал, решит мою проблему, однако на этот раз он просто не работает, заявив, что «one.ChangeDutyCycle (75) не определен».

Я считаю, что ошибка в том, что я прекращаю инициализацию ШИМ, однако я не знаю сложностей. Пожалуйста, помогите мне найти решение. Спасибо!

Код 1

import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
gpio.setwarnings(False)

gpio.cleanup()

def init():
    gpio.setmode(gpio.BCM)
    gpio.setup(4, gpio.OUT)
    gpio.setup(17, gpio.OUT)
    gpio.setup(27, gpio.OUT)
    gpio.setup(22, gpio.OUT)

init()
one = gpio.PWM(4, 50)
two = gpio.PWM(17, 50)
three = gpio.PWM(27, 50)
four = gpio.PWM(22, 50)
one.start(0)
two.start(0)
three.start(0)
four.start(0)

def tl(tf):
    init()
    one.ChangeDutyCycle(75)
    two.ChangeDutyCycle(0)
    three.ChangeDutyCycle(75)
    four.ChangeDutyCycle(0)
    time.sleep(tf)
    one.stop()
    two.stop()
    three.stop()
    four.stop()
    gpio.cleanup()

def tr(tf):
    init()
    one.ChangeDutyCycle(0)
    two.ChangeDutyCycle(75)
    three.ChangeDutyCycle(0)
    four.ChangeDutyCycle(75)
    time.sleep(tf)
    one.stop()
    two.stop()
    three.stop()
    four.stop()
    gpio.cleanup()

while True:
    a = input("tl or tr: ").lower()
    b = input("time: ")
    if a == "tl":
        tl(float(b))

    elif a == "tr":
        tr(float(b))

    elif a.startswith("q") == True:
        break

    else:
        print("try again")

one.stop()
two.stop()
three.stop()
four.stop()

gpio.cleanup()

quit()

Код 2

import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
gpio.setwarnings(False)

gpio.cleanup()

def init():
    gpio.setmode(gpio.BCM)
    gpio.setup(4, gpio.OUT)
    gpio.setup(17, gpio.OUT)
    gpio.setup(27, gpio.OUT)
    gpio.setup(22, gpio.OUT)

init()
def pwminit():
    one = gpio.PWM(4, 50)
    two = gpio.PWM(17, 50)
    three = gpio.PWM(27, 50)
    four = gpio.PWM(22, 50)
    one.start(0)
    two.start(0)
    three.start(0)
    four.start(0)

pwminit()

def tl(tf):
    init()
    pwminit()
    one.ChangeDutyCycle(75)
    two.ChangeDutyCycle(0)
    three.ChangeDutyCycle(75)
    four.ChangeDutyCycle(0)
    time.sleep(tf)
    one.stop()
    two.stop()
    three.stop()
    four.stop()
    gpio.cleanup()

def tr(tf):
    init()
    pwminit()
    one.ChangeDutyCycle(0)
    two.ChangeDutyCycle(75)
    three.ChangeDutyCycle(0)
    four.ChangeDutyCycle(75)
    time.sleep(tf)
    one.stop()
    two.stop()
    three.stop()
    four.stop()
    gpio.cleanup()

while True:
    init()
    pwminit()
    a = input("tl or tr: ").lower()
    b = input("time: ")
    if a == "tl":
        tl(float(b))

    elif a == "tr":
        tr(float(b))

    elif a.startswith("q") == True:
        break

    else:
        print("try again")

one.stop()
two.stop()
three.stop()
four.stop()

gpio.cleanup()


...