2016-06-30 2 views
0

J'ai du code écrit en C++ que je traduis en Python. Le code C++ est:Configuration et envoi de données via une connexion série en Python

WriteBuffer[0] = unsigned char (0xc0 + (Steer & 0x1F));   // change the signal to conform to jrk motor controller 
    WriteBuffer[1] = unsigned char (Steer >> 5) & 0x7F;    //  two-word feedback signal 

    if(!WriteFile(hSerial[1], &WriteBuffer, 2, &BytesWritten, NULL)){ 
     //error occurred. Report to user. 
     cout<<"error writing T2 \n"; 
     cout<<BytesWritten; 
    } 

Le code que je l'ai écrit en Python, ce qui ne fonctionne pas, est la suivante:

rightWheel = bytearray(b'\xc000') 
rightWheel[0] = rightWheel[0] + (rightWheelSteer & 0x1F) 
rightWheel[1] = (rightWheelSteer >> 5) & 0x7F 
rightWheel = bytes(rightWheel) 
ser2.write(rightWheel) 

Le premier octet de rightWheel semble contenir les données correctes, mais le second octet ne fait pas. Je veux que rightWheel [1] contienne un seul octet, mais ce n'est pas le cas.

Quel code Python va me permettre de mettre en place un seul octet contenant une variable décalée de cinq bits de droite et ensuite bit à bit avec 0x7F?

+0

Pouvez-vous fournir des commentaires d'exemple et de sortie? Votre code semble correct et produit des résultats sensibles pour moi. – MisterMiyagi

+0

Merci beaucoup de vérifier le code. Quand je suis allé créer des exemples d'entrée et de sortie, j'ai trouvé un problème avec mon code de test qui causait le problème. Donc, mon code est en effet correct. – Daanii

+0

Oups, il y avait toujours un problème, comme indiqué dans ma réponse ci-dessous. – Daanii

Répondre

1

Le problème était dans ma première ligne de code. J'ai eu ceci:

rightWheel = bytearray(b'\xc000') 

Mais ce RENDAIT rightWheel en 3 octets, en prenant les deux plus à droite comme un 0s octet caractères ASCII pour 0 chacun. Donc rightWheel est devenu b '\ xc0 \ x30 \ x30'.

Cette première ligne modifiée du code fonctionne correctement:

righWheel = bytearray(b'\xc0\x00')