2010-07-22 15 views
0

Je vais avoir des problèmes pour faire parler Python à un affichage de matériel à l'aide pyserial. Certaines des fonctions d'affichage ont besoin d'un mot signé à envoyer comme arguments après les commandes (ie. X ou Y sur l'écran d'affichage).Comment puis-je convertir un entier en un mot signé en Python (pour une utilisation avec PySerial)?

je reçois par avec chr() précédemment, mais qui ne fonctionne qu'avec des numéros < 255.

J'ai essayé ce qui suit pour la conversion mais il donne des résultats étranges, en plaçant des choses loin l'ensemble Position:

def ByteIt(self,data): 
    datastring = str() 
    for each in tuple(str(data)): 
     datastring = datastring + chr(int(each)) 
    return datastring 

je peux être moi-même loin ici :)

Exemple de la façon dont je voudrais l'utiliser:

x = 100 
y = 350 
serial.Write('\x01' + ByteIt(x) + ByteIt(y)) # command , xpos , ypos 

La chose est, quand je le fais, les choses n'est pas placé à x100, y350, la plupart du temps l'écran se bloque :(

Des conseils sur la façon dont cela peut être fait correctement?

+0

Y at-il une raison quelconque vous ne pouvez pas simplement écrire 'serial.Write (« \ x01 » + str (x) + str (y)) 'ou quelque chose à cet effet? –

+0

Je ne sais pas pourquoi, mais je pense que quand je l'ai fait, l'écran l'a imprimé au lieu de l'exécuter. – Kanonskall

Répondre

2

Lire sur le module struct.

http://docs.python.org/library/struct.html

Remplacer tous les "chr" et d'autres choses avec des appels appropriés struct.pack().

Plus précisément

bytes = struct.pack('h', some_data) 

devrait vous donner un "mot signé".

+0

Aviez-vous lu le document? 'pack ('> HH', freq, millisecs)' est ce que vous auriez dû faire. Pack –

+0

('> H', fréq) + paquet ('> H', millsecs) ... a fait le travail dans une fonction similaire! Merci! :) – Kanonskall

+0

bons conseils Lott! Merci encore! J'étais un peu de lecture rapide Je dois avouer :) – Kanonskall

0

Vous pouvez réviser à nouveau la documentation sur « pack » et « déballer ». La sélection de la majuscule ou de la minuscule appropriée vous permet de spécifier l'Endianness. Ainsi, en fonction de l'exemple ci-dessus qui ne fonctionne pas parfaitement sur votre appareil, je suppose que vous avez besoin:

x = 100 
y = 350 
serial.Write('\x01' + 
      struct.pack('>hh', x) + 
      struct.pack('>hh', y)) # command , xpos , ypos