Cómo enviar datos en serie desde el script de Python a Arduino en Windows – Nothing Works

No puedo enviar correctamente datos en serie desde un script de Python a un Arduino Uno. Estoy usando 9600 baudios, y el Arduino se reinicia correctamente, pero no lee el carácter que estoy enviando desde el script de Python. Llamo a time.sleep() para asegurar que el reinicio en el Arduino no interfiera, y estoy usando Windows 7. Debo aclarar diciendo que mi escritorio está ejecutando el script de Python y está conectado por USB a la Serie de mi Arduino Uno . Luego tengo los pines RX y TX (pines 0 y 1) de mi Uno conectados a mi Mega’s Serial1 (pines 18 y 19). Luego uso el Monitor Serial en el IDE de Arduino en mi computadora portátil (que usa el Serial regular de Mega) para ver lo que está viendo el Uno. Aquí está el código para el Mega:

 void setup() { Serial1.begin(9600); Serial.begin(9600); Serial.println("Master Ready"); } void loop() { if(Serial1.available() > 0) { char inByte = Serial1.read(); Serial.write(inByte); Serial.write("\n"); } } 

Aquí está el código para el Uno:

 void setup() { Serial.begin(9600); Serial.println("Slave Ready"); } void loop() { if(Serial.available() > 0) { char inByte = Serial.read(); Serial.write(inByte); } } 

Y finalmente, aquí está el script de python:

 import sys import serial import time ser = serial.Serial("COM23",9600) n = int(sys.argv[1]) print n time.sleep(10) print ser print n == 41 if (n == 70): ser.write(chr(97)) print 'a' elif n == 41: ser.write('ggggggg') print 'b' elif n == 42: ser.write('hello world') print 'c' elif n == 25: ser.write(chr(100)) elif n == 26: ser.write(chr(101)) elif n == 22: ser.write(chr(102)) elif n == 10: ser.write(chr(103)) elif n == 4: ser.write(chr(104)) elif n == 14: ser.write(chr(105)) elif n == 7: ser.write(chr(106)) elif n == 11: ser.write(chr(105)) elif n == 5: ser.write(chr(106)) elif n == 17: ser.write(chr(107)) # head - a - 70 # right bicep - b - 41 # right forearm - c - 42 # left bicep - d - 25 # left forearm - e - 26 # chest - f - 22 # right thigh - g - 10 # left thigh - h - 4 # right shin - i - 11 - 14 # left shin - j - 5 - 7 # waist - k - 17 

En caso de que ayude, básicamente estoy tratando de escribir las ubicaciones de éxito en Doom3 en un Arduino en serie para que Arduino pueda encender un motor en la ubicación correcta de tu cuerpo. El código del juego está en C ++, y primero intenté usar una biblioteca en serie para C ++, pero tampoco funcionó.

Acabo de encontrar algo similar. La clave aquí es que funcionó cuando se comunicó con el arduino desde el IDE y falló al usar algún otro progtwig en serie. Usted ha sido mordido por la auto-reset .

Echa un vistazo a este enlace en el Arduino Playground para obtener una descripción detallada de lo que está sucediendo y qué hacer al respecto. El sitio da varias soluciones dependiendo de su habilidad y nivel de comodidad.

Espero que su código C ++ funcione una vez que implemente una de las áreas de trabajo de este sitio.

Si entiendo su configuración física correctamente, parece haber un conflicto entre el IDE de Arudino y python. Solo un progtwig por defecto puede abrir el puerto serie a la vez (como abrir un archivo para escritura exclusiva). Si solo usa el script de Python, no inicie el IDE arduino y cambie el ardiuno para encender un LED cuando reciba un msg, que debería funcionar (si la asignación del puerto serie es correcta). Los LEDs de diagnóstico del arduino deberían parpadear con el tráfico serial normal, pero para un solo mensaje podría estar perdiendo el parpadeo corto.

Parece que también hay un conflicto entre el uso del puerto serie entre el IDE y entre Arduinos. (No entiendo la razón de múltiples Arduinos.) Cada par de comunicación serie debe ser único. Use la biblioteca de series de software de Arduino para usar otro par de pines digitales para comunicarse entre los arduinos, no los pines d0 / d1 que actualmente usa el chip FTDI para hablar con el IDE.

También podría incluir algunos mensajes de diagnóstico en el script de Python si no puede abrir / comunicarse con el puerto serie.

También tuve un problema con la comunicación en serie, logré resolverlo cerrando el monitor en serie en el Arduino. No sé si lo abres cuando ejecutas tu progtwig, pero si lo haces, ese podría ser el problema.