Witam.
Program napisany w Pythonie, ma za zadanie pobierać informacje z klawiatury, odpowiednio je przetworzyć i poprzez moduł bluetooth wysłać do mikrokontrolera.
Problemem, który napotkałem już na początku jest bardzo duże opóźnienie - od momentu wciśnięcia klawisza, do odebrania danych przez mikrokontroler mija około 3 sek, to zdecydowanie, zdecydowanie za dużo jak na moje potrzeby.
Podczas wysyłania stringa przez dowolny terminal, informacja dociera prawie natychmiast.
Wstawienie linijki "print (x)" zamiast "bt.write(x)" powoduje zmienianie wartości w liście w zasadzie instant.
Domyślam się więc, że to sam etap przesyłania danych jest przyczyną tak dużego opóźnienia.
Jak mogę rozwiązać ten problem?
import pygame, sys, serial
from pygame.locals import *
def main():
HAIL = [1, 0, 0, 0, 0, 0]
bt = serial.Serial('COM4', 9600, timeout = 10)
pygame.init()
DISPLAYSURF = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello Pygame World!')
while True:
x_str = ("x" + " " + standardize(HAIL[0]) + " " + standardize(HAIL[1]) + " " + standardize(HAIL[2])
+ " " + standardize(HAIL[3]) + " " + standardize(HAIL[4]) + " " + standardize(HAIL[5]))
x = str.encode(x_str)
print (x)
#bt.write(x)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT:
HAIL[0] = 1
if event.key == K_UP:
HAIL[1] = 1
if event.key == K_RIGHT:
HAIL[2] = 1
if event.key == K_DOWN:
HAIL[3] = 1
if event.key == K_RIGHT:
HAIL[4] = 1
if event.key == K_DOWN:
HAIL[5] = 1
def standardize(val):
if val >= 0 and val < 10:
val_str = "+00" + str(val)
elif val >=10 and val < 100:
val_str = "+0" + str(val)
elif val >= 100 and val < 1000:
val_str = "+" + str(val)
elif val < 0 and val > - 10:
val_str = "-00" + str(-val)
elif val <= - 10 and val > -100:
val_str = "-0" + str (-val)
elif val <= - 100 and val > -1000:
val_str = str(val)
else:
val_str = "+000"
return val_str
main()