Я пытаюсь сделать всенаправленного робота на 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
Я не знаю что делать.
Пожалуйста помоги!!!