2017-10-11 13 views
1

は '\ X08を':Unicode文字列は、バイトにエンコードしてくださいサポートされていません例外TypeError:私はこの答えを読ん

しかし、私はそれを理解していませんでした。私の場合、chr(code)serial.writeの機能に入ります。

b'chr(8)'と書いてください。

import serial 
import pygame 
from pygame.locals import * 


class RCTest(object): 
def __init__(self): 
    pygame.init() 
    screen = pygame.display.set_mode((400, 300)) 
    self.ser = serial.Serial('COM3', 9600, timeout = 1) 
    self.send_inst = True 
    self.steer() 

def steer(self): 

    while self.send_inst: 

     for event in pygame.event.get(): 
      print("entered for loop") 

      if event.type == KEYDOWN: 
       print("entered event.type == KEYDOWN") 

       key_input = pygame.key.get_pressed() 
       print("pygame.key.get_pressed() running") 

       # complex orders 
       if key_input[pygame.K_UP] and key_input[pygame.K_RIGHT]: 
        print("Forward Right") 
        self.ser.write((chr(6)) 

       elif key_input[pygame.K_UP] and key_input[pygame.K_LEFT]: 
        print("Forward Left") 
        self.ser.write((chr(4)) 

       # simple orders 
       elif key_input[pygame.K_UP]: 
        print("Forward") 
        self.ser.write((chr(8)) 

       elif key_input[pygame.K_DOWN]: 
        print("Reverse") 
        self.ser.write((chr(2)) 

       # exit 
       elif key_input[pygame.K_x] or key_input[pygame.K_q]: 
        print('Exit') 
        self.send_inst = False 
        self.ser.write((chr(0)) 
        self.ser.close() 
        break 

      elif event.type == pygame.KEYUP: 
       self.ser.write((chr(0)) 


if __name__ == '__main__': 
    RCTest() 

私はプログラムを実行した後、下向き矢印を押します。バイトにエンコードする

entered for loop 
entered for loop 
entered for loop 
Traceback (most recent call last): 
entered event.type == KEYDOWN 
    File "C:/Users/../rc_control_test.py", line 58, in <module> 
pygame.key.get_pressed() running 
    RCTest() 
Reverse 
+0

数字8を「バイト」形式で送信する場合は、もしあなたが文字を必要とするならば、あなたは 'self.ser.write(bytes(chr(8)、 'UTF-8')'を実行するだけで、 'self.ser.write(struct.pack )) ')。 – Torxed

+0

完璧な男、それは動作します!ありがとうございます:) –

+0

'b '\ x08''または' bytes([8]) 'は他のオプションです。 –

答えて

1

"string".encode() 
>> b'string' 

したがって、あなたはおそらく、このように書くことができます。

エルス
self.ser.write(("string".encode())) 

、一度に1つの文字を書きたい場合:

self.ser.write("A".encode()) 
+0

助けてくれてありがとう、私はこの 'self.ser.write(bytes(chr(8)、 'UTF-8'))'を試してみました。 –

+0

OK Daniel Lee 'self.ser.write(" 8 ".encode())は、Arduino経由で私の車をコントロールすることができるので、さらに効果的です! –

+0

または単に 'self.ser.write(b'string ')'です。 –

関連する問題