Comunicación en serie entre Arduino y Python, cuestión de usar valores hexadecimales

Estoy intentando arrancar un motor desde la computadora mediante el código en Python 3.4, usando pySerial para comunicarme con un Arduino Uno. He empaquetado el valor que estoy enviando a hexadecimal, así que solo tengo un byte a la vez, pero tengo un problema para obtener el número correcto en el lado de Arduino ya que estoy enviando en el lado de Python.

CÓDIGO DE PITÓN:

import serial import struct ser = serial.Serial( port ='COM4', baudrate = 9600, parity = serial.PARITY_ODD, stopbits = serial.STOPBITS_TWO, bytesize = serial.EIGHTBITS ) #ser.open() #opens port ser.isOpen() #returns true? motorState = 0 wristBend = 'Left' while True: #need to create options to send to arduino if wristBend == 'Left': motorState = 2 elif wristBend == 'Right': motorState = 3 else: motorState = 1 motorChar = struct.pack('<B', motorState) #returns the value as a character interger #motorChar = str(hex(motorState)) print(motorChar) ser.write(motorChar) print(ser.read()) break 

CÓDIGO ARDUINO:

 int motorPinLeft = 10; int motorPinRight = 11; int motorSpeedLeft = 0; int motorSpeedRight = 0; void setup() { pinMode(motorPinLeft, OUTPUT); pinMode(motorPinRight, OUTPUT); Serial.begin(9600); while(!Serial); //waits for arduino to be ready, not neaded for duo Serial.println("Speed 0 - 255"); } void loop() { if (Serial.available()) { int ch = Serial.read(); switch (ch) { case 1: motorSpeedLeft = 0; motorSpeedRight = 0; break; case 2: motorSpeedLeft = 127; motorSpeedRight = 0; break; case 3: motorSpeedLeft = 0; motorSpeedRight = 127; break; } Serial.write(ch); analogWrite(motorPinLeft, motorSpeedLeft); analogWrite(motorPinRight, motorSpeedRight); delay(2500); //wait for 2.5 seconds to make the motor vibrate motorSpeedRight = 0; motorSpeedLeft = 0; analogWrite(motorPinLeft, motorSpeedLeft); analogWrite(motorPinRight, motorSpeedRight); 

No solo no se comunica nada con mi circuito, sino que la salida de mi código de Python, donde imprimo lo que se envía al Arduino y lo que se envía desde el Arduino, es esto:

 b'\x02' b'S' 

Si cambio un código de caso de cambio a 83 (el código ASCII de S), o cambio el tipo de la variable a byte, int, uint8_t, obtendré exactamente la misma salida. ¿Qué estoy haciendo mal aquí? Lo siento si es algo obvio, soy bastante nuevo en python y arduino. ¡Gracias de antemano por cualquier ayuda!

no es difícil aquí es un ejemplo simple, por lo general es una buena idea comenzar de manera simple y luego boost la funcionalidad a lo que desea.

test_serial.py

 import serial ser = serial.Serial("COM4",timeout=5) # everything else is default ser.write("\x45") print "RECIEVED BACK:",repr(ser.read(5000)) 

test_serial.ino

 int incomingByte = 0; // for incoming serial data void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC); } }