Управление двигателем с помощью pygame и pyserial

Я установил связь между моим ноутбуком и Arduino по протоколу UART. Я использовал pygame, чтобы принимать нажатия клавиш, такие как KEY_UP, KEY_DOWN, и передавать байт с помощью pyserial с моего ноутбука на Arduino. Я хотел разработать свой существующий код таким образом, чтобы при нажатии конкретной клавиши, т.е. KEY_UP, двигатель вращался, что он и делает, но как только я отпускаю клавишу, он не выключается, возможно, потому что байт все еще остается в последовательном буфере, поэтому в основном я хочу, чтобы код работал так, что, когда я отпущу ключ, двигатель должен выключиться.

import pygame
import serial

ser = serial.Serial('/dev/ttyACM1',9600)
pygame.init()

win =  pygame.display.set_mode((100,100))

pygame.display.set_caption("ugv")
x = 20
y = 20
w = 30
h = 40
vel = 5


run = True
while run:
      pygame.time.delay(100)
      for event in pygame.event.get():
          if event.type == pygame.QUIT:
             run = False
      keys = pygame.key.get_pressed()
      if keys[pygame.K_LEFT]:
         ser.write(b'c')
      if keys[pygame.K_RIGHT]:
         ser.write(b'd')
      if keys[pygame.K_UP]:
         ser.write(b'a')
      if keys[pygame.K_DOWN]:
         ser.write(b'b')


    pygame.draw.rect(win,(0,255,0),(x,y,w,h)) 
    pygame.display.update()   
pygame.quit()

person vihang pathak    schedule 12.12.2020    source источник


Ответы (1)


Вам нужно добавить случай в свой код Python, когда никакая клавиша не нажата, и в этом случае отправить сигнал, говорящий об остановке двигателя.

В качестве альтернативы вы можете изменить свой код Arduino, чтобы отправлять сигналы двигателя только в течение небольшого периода времени после получения сигнала, а затем сброса.

person sgillen    schedule 12.12.2020
comment
как это последовательный UART, поэтому сброс означает очистку буфера? - person vihang pathak; 12.12.2020
comment
Когда я говорю о сбросе, я имею в виду, что если Arduino не получил новую команду по прошествии некоторого времени, напишите моторам команду нулевой скорости. - person sgillen; 12.12.2020