Я пытаюсь сделать всенаправленного робота на Python, я использовал PWM для управления скоростью двигателя постоянного тока, но я думал, что это вызвало много проблем, поэтому я стер его, и это моя "последняя" программа (некоторые части комментируются потому что я тестировал программу), когда я запускаю ее в первый раз, моя программа работает хорошо, как только я набираю клавишу со стрелкой вверх, она выходит из строя и перезагружает Raspberry, я использую кодировщики, чтобы узнать моторы положение, и я читаю их с прерываниями.

Если я запускаю один из двигателей, то программа работает очень хорошо, я имею в виду, я комментирую каждую часть других двигателей и пробую снова и снова; но как только я "собрал" всю свою программу, в самый первый момент я нажимаю клавишу со стрелкой, программа падает и перезагружает мою Raspberry, поэтому я не думаю, что это вопрос соединений (короткое замыкание или что-то еще).

import RPi.GPIO as GPIO
import os
import time

##Encoders Counters
contaM1 = 0
##contaM2 = 0
contaM3 = 0
##contaM4 = 0

##GPIO's Encoders
encA1 = 31
encB1 = 32
##encA2 = 33
##encB2 = 35
encA3 = 36
encB3 = 37
##encA4 = 38
##encB4 = 40

##GPIO's to motors control
mot1F = 13#F -> Forward
mot1B = 11#B -> Backward
mot2F = 7
mot2B = 12
mot3F = 16
mot3B = 15
mot4F = 18
mot4B = 22

##setup
GPIO.setmode(GPIO.BOARD)

##Setup Encoders
GPIO.setup(encA1, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(encB1, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encA2, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encB2, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(encA3, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(encB3, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encA4, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encB4, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encA4, GPIO.IN, pull_up_down = GPIO.PUD_UP)
##GPIO.setup(encB4, GPIO.IN, pull_up_down = GPIO.PUD_UP)

##Setup Motors
GPIO.setup(mot1F, GPIO.OUT)
GPIO.setup(mot1B, GPIO.OUT)
GPIO.setup(mot2F, GPIO.OUT)
GPIO.setup(mot2B, GPIO.OUT)
GPIO.setup(mot3F, GPIO.OUT)
GPIO.setup(mot3B, GPIO.OUT)
GPIO.setup(mot4F, GPIO.OUT)
GPIO.setup(mot4B, GPIO.OUT)

##Imprime en Consola contador
def Print_enc():
    print('Count M1:', contaM1)
##    print('Count M2:', contaM2)
    print('Count M3:', contaM3)
##    print('Count M4:', contaM4)

##callback
def CountM1(channel):
    global contaM1
    contaM1 += 1
    os.system("clear")
    Print_enc()

##def CountM2(channel):
##    global contaM2
##    contaM2 += 1
##    os.system('clear')
##    Print_enc()

def CountM3(channel):
    global contaM3
    contaM3 += 1
    os.system('clear')
    Print_enc()

##def CountM4(channel):
##    global contaM4
##    contaM4 += 1
##    os.system('clear')
##    Print_enc()

def fwd():
    GPIO.output(mot1F, True)
    GPIO.output(mot1B, False)
    GPIO.output(mot2F, True)
    GPIO.output(mot2B, False)
    GPIO.output(mot3F, True)
    GPIO.output(mot3B, False)
    GPIO.output(mot4F, True)
    GPIO.output(mot4B, False)

def Off():
    GPIO.output(mot1F, False)
    GPIO.output(mot1B, False)
    GPIO.output(mot2F, False)
    GPIO.output(mot2B, False)
    GPIO.output(mot3F, False)
    GPIO.output(mot3B, False)
    GPIO.output(mot4F, False)
    GPIO.output(mot4B, False)

Off()

##Interrupts
GPIO.add_event_detect(encA1, GPIO.BOTH, callback = CountM1, bouncetime = 200)
GPIO.add_event_detect(encB1, GPIO.BOTH, callback = CountM1, bouncetime = 200)
##GPIO.add_event_detect(encA2, GPIO.BOTH, callback = CountM2, bouncetime = 200)
##GPIO.add_event_detect(encB2, GPIO.BOTH, callback = CountM2, bouncetime = 200)
GPIO.add_event_detect(encA3, GPIO.BOTH, callback = CountM3, bouncetime = 200)
GPIO.add_event_detect(encB3, GPIO.BOTH, callback = CountM3, bouncetime = 200)
##GPIO.add_event_detect(encA4, GPIO.BOTH, callback = CountM4, bouncetime = 200)
##GPIO.add_event_detect(encB4, GPIO.BOTH, callback = CountM4, bouncetime = 200)
##GPIO.add_event_detect(encA4, GPIO.BOTH, callback = CountM4, bouncetime = 200)
##GPIO.add_event_detect(encB4, GPIO.BOTH, callback = CountM4, bouncetime = 200)

Print_enc()

x = 14

try:

    while 1:
        control = input()
        contaM1 = 0
##        contaM2 = 0
        contaM3 = 0
##        contaM4 = 0

        if control == '\x1b[A':
            while contaM1 <= x:
                adelante()
                Print_enc()
            apagado()
            contaM1 = 0
##            contaM2 = 0
            contaM3 = 0
##            contaM4 = 0
            time.sleep(0.2)
            Print_enc()

        else:
            print('Try again')

except KeyboardInterrupt:
    pass

Я не знаю что делать.

Пожалуйста помоги!!!

0