Ардуино не может правильно выводить
Я новичок в python и средний в Arduino, и у меня возникла идея использовать их вместе для проекта. Я пытаюсь сделать машину Arduino + Python, которой я могу управлять с помощью своего компьютера. Я использовал Pyfirmata, и код кажется мне идеальным. Когда я запускаю код из CMD, у меня возникает странная ошибка/проблема. Я загрузил Standard Firmata в Arduino UNO. Я не получаю ошибок при загрузке или запуске, просто его вывод испорчен.
Вот код Python:
from pyfirmata import Arduino, util
import time
board = Arduino("COM3")
MotorLeft = board.get_pin('d:10:o') # Assigning output to PIN
MotorRight = board.get_pin('d:11:o') # Assisging output to PIN
play = True
while play:
control = input(
print("Enter W, A or D to move forwards, left or right. Enter 0 to exit"))
if control != 0:
if control == "W" or "w":
MotorRight.write(1)
MotorLeft.write(1)
time.sleep(1)
MotorRight.write(0)
MotorLeft.write(0)
if control == "A" or "a":
MotorLeft.write(1)
time.sleep(1)
MotorLeft.write(0)
if control == "D" or "d":
MotorRight.write(1)
time.sleep(1)
MotorRight.write(0)
else:
print("Invalid Commmand")
else:
print("Exited Succesfully")
play = True
В настоящее время я не построил машину, я использую пару светодиодов, чтобы проверить работу двигателей и проверить код.
Вот ответ CMD:
Вот ссылка на выходное видео. Я ввел «W», что в идеале должно включать оба светодиода, однако оба они включаются, затем выключаются, а затем включаются и выключаются один за другим.
https://youtu.be/DjUkkpzF0so
@SKAI, 👍2
Обсуждение1 ответ
Лучший ответ:
Я не могу это проверить, но, думаю, вам нужно изменить команды или, например:
if control == "W" or "w":
Изменить на
if ((control == 'W') or (control == 'w'))
И аналогично для других операторов if.
Также можно не проверять наличие элемента управления == 0, так как в противном случае это не будет символом.
Кроме того, в Python обычно используется конструкция elif
(else if), поэтому вместо:
if control != 0:
if control == "W" or "w":
MotorRight.write(1)
MotorLeft.write(1)
time.sleep(1)
MotorRight.write(0)
MotorLeft.write(0)
if control == "A" or "a":
MotorLeft.write(1)
time.sleep(1)
MotorLeft.write(0)
if control == "D" or "d":
MotorRight.write(1)
time.sleep(1)
MotorRight.write(0)
else:
print("Invalid Commmand")
Вы можете написать:
if ((control == 'W') or (control == 'w')):
MotorRight.write(1)
MotorLeft.write(1)
time.sleep(1)
MotorRight.write(0)
MotorLeft.write(0)
elif ((control == 'A') or (control == 'a')):
MotorLeft.write(1)
time.sleep(1)
MotorLeft.write(0)
elif ((control == 'D') or (control == 'd')):
MotorRight.write(1)
time.sleep(1)
MotorRight.write(0)
else:
print("Invalid Commmand")
Кроме того, вы можете комбинировать или
в списке (но я не могу это проверить, под рукой нет компилятора Python), например
if (control in ['W', 'w']):
Спасибо. попробую внести эти изменения, @SKAI
Спасибо! Этот проект работает сейчас! Вы знаете, что вызывает эту проблему? так что я могу избежать этой проблемы в будущем., @SKAI
Приятно слышать, что вы можете принять мой ответ, чтобы другие уведомили, что проблема решена., @Michel Keijzers
если control=='W' или 'w', так как 'w' не равно 0, это всегда будет верно, это то же самое, что написать if control=='W' или True, @Chad G
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- В чем разница, когда ардуино был отключен от сети, и когда последовательный порт был закрыт?
- Моя проблема, 51:28: ошибка: ожидаемое первичное выражение перед токеном ')' может кто-нибудь дать мне совет или направить меня к исправлению моей проблемы? Без разницы
- Программирование Arduino с использованием Python, а не C/C ++
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
Можно ли увидеть, какой у вас код Arduino?, @smajli
@smajli, код Arduino - PyFirmata, @Juraj