j'ai eu le problème suivant:comportement mystérieux avec pyserial
J'ai un Arduino ici qui est connecté à mon Mac. L'Arduino lit et répond aux données série. J'ai fait un petit script python3 qui prend l'entrée de l'utilisateur et utilise pySerial pour écrire des commandes comme 'set (13, 255) ~' sur l'Arduino. qui fonctionne très bien:
while 1:
cmd = input("<<< ")
cmd += '~'
if cmd != "~":
serialPort.write(cmd.encode())
output = str(serialPort.readline()).upper()[2:-5]
if output != " ":
print(">>> ", output)
Voici le problème:
Si je veux envoyer des commandes « automatique » dans le script, par exemple dans une boucle, l'Arduino ne répond plus, même les commandes envoyées sont les mêmes, également encodées et de type "byte".
for i in range[0, 256]:
cmd = 'set(13, '
cmd += str(i)
cmd += ')~'
serialPort.write(cmd.encode())
time.sleep(0.1)
La chose étrange est, si je déclare d'abord la variable (cmd) en entrée, son travail aussi bien, mais cela signifie un manuel d'interruption chaque fois que la commande est envoyée.
cmd = input()
cmd = 'set(13, '
cmd += str(i)
cmd += ')~'
Après quelques heures de recherche je n'ai absolument aucune idée de ce que le problème pourrait être. Comme je l'ai dit, le type de données est toujours un octet après l'encodage.
essayez d'ajouter un serialPort.flush après l'appel d'écriture – MrSykkox
Malheureusement, cela ne fonctionne pas. – rckey