8 votos

Ejecución de comandos de Control para una MCU en serie

Estoy buscando a integrar una interfaz de comando en un proyecto que estoy haciendo que acepte comandos off de serie de un PC.

La idea es que el dispositivo va a hacer su cosa pero se envía un comando, se va a realizar. Esto es diferente a la mayoría de los ejemplos que he logrado encontrar que es sólo una de ralentí del dispositivo de espera para la serie de datos.

Así, por ejemplo, un dispositivo que controla los LEDs y se reproduce una animación. Digamos que hay 3 preset animaciones, y cuando se enciende se juega siempre el número 1. En el lado de la PC iba a enviar un comando de 'juego de preset 2', o 'cambio de color a verde' o enviando un live animación en tiempo real en el dispositivo para jugar en los LEDs.

Así que mi pregunta es que no puedo encontrar mucha información acerca de este "patrón de diseño" ? No sé por dónde empezar a buscar. Lo más cercano que he llegado es pre-hechos arduino serie de análisis de bibliotecas. Sin embargo, estoy buscando más de C / non arduino / enfoque teórico.

He buscando en la serie de protocolos, sino que es solamente de cosas tales como el SPI y I2C etc, en realidad no se cómo implementar un control / comando en la interfaz de software.

También me enteré de HDLC, de nuevo a pesar de que parece ser más de un estándar de protocolo. Un hilo es similar http://stackoverflow.com/questions/1445387/how-do-you-design-a-serial-command-protocol-for-an-embedded-system Que tiene algunos muy bonito información, pero de nuevo su hacer con el protocolo, la comunicación en sí misma.

Estoy tratando de encontrar la forma de código / implementar esto para crear un comando o control de capacidad.

¿Puedo usar un bucle infinito de monitor y la captura de la serie para una entrada de comando, y el uso de una lista de SI las declaraciones de la elección ¿qué comando para llevar a cabo, pero entonces, ¿qué sucede cuando no hay comandos y el sistema debería ser lo normal, o si se echa de menos un comando?

Interrumpir impulsado, estado de la máquina?

Hay un nombre oficial para este que puede ser utilizado para la investigación y encontrar ejemplos?

EDITAR:

Para cualquier persona que tenga la misma pregunta, encontré este muy buen ejemplo, mientras que la investigación,la http://www.adnbr.co.uk/articles/parsing-simple-usart-commands

6voto

meds Puntos 271

Hay muchas maneras de implementar un protocolo de comunicación. Por ejemplo, usted puede elegir el uso de:

  • formato legible o binario
  • la comprobación de errores, tales como una suma de comprobación CRC o de
  • inicio y/o final de mensaje de caracteres
  • la longitud del mensaje, etc número de carga de la información
  • reconocer / reconocimiento negativo / mecanismos de reintento

Su comando de ejemplo es legible y debe utilizar '\n' (enter) como el final de un mensaje de carácter. Inicio / final de mensaje de personajes hacen que sea más fácil analizar la secuencia de entrada.

Un programa típico de flujo sería de esperar por el carácter de inicio, a continuación, almacenar los siguientes bytes en un búfer de mensaje hasta el final de carácter es recibido. Una vez que ocurre pasar el búfer otra función para analizar el mensaje. Si no hay ningún carácter de inicio, acaba de empezar a almacenar los bytes de inmediato hasta el final de carácter es recibido.

La mayoría de los* sistemas embebidos ejecuta en un bucle infinito. Manejo de serie de la transmisión y recepción se realiza a través de las interrupciones en el Arduino (ver HardwareSerial.cpp). Caracteres recibidos se coloca en un búfer. En cada iteración del bucle se revise para ver si hay caracteres en el búfer (de Serie.disponible()) y de proceso. Por la recepción de caracteres usando las interrupciones de caracteres no se debe perder. No hacer todo el procesamiento en estas rutinas de interrupción, aunque, más que llegar a ser demasiado larga y por lo tanto perder posteriores interrupciones.

Si usted no desea que su dispositivo a estar inactiva bucle, lo puso en un estado de sueño en 'pause' el bucle hasta que una interrupción o cualquier otro evento.

Me gusta mucho esta biblioteca para legible por humanos de mensajería: http://playground.arduino.cc/Code/Messenger

* No puedo pensar en un sistema que no, pero tal vez hay uno por ahí.

0voto

Peter Bennett Puntos 15949

Todo su programa tiene que hacer es:
1. compruebe con frecuencia el puerto serie para un nuevo personaje
2. saltar a la rutina adecuada/set status/lo que sea, dependiendo del carácter
3. vaya a la 1

El programa puede actuar sobre los caracteres individuales, o usted puede crear su propio formato de mensaje - a menudo me comenzó un cammand con "$" y el final con un salto de línea y utiliza caracteres ASCII legible para el comando (hace para facilitar la depuración!).

Asegúrese de que el programa no se colgó si se recibe un comando no válido!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X