Serie anidada en declaraciones (No funciona)

2

He estado intentando que esto funcione durante unos días.

Lo que tengo en este momento es TouchOSC instalado en mis comandos de envío de Iphone a un programa de procesamiento, que a su vez los simplifica y los envía a mi arduino a través de la serie.

Aquí es donde mi problema es que los comandos llegan y puedo imprimirlos fácilmente. Llegan correctamente. El formato es t11 o t10 (t para el control de alternancia, luego se modificó # para la identificación del control, el último # está activado o desactivado (1 o 0)

Ahora, cuando intento descomponer esto con las afirmaciones if nunca funciona. Sé que los datos son correctos cuando llega al arduino.

Necesito probar si la primera charla es una 't' simple si la declaración

if(Serial.read() == 't')

antes de esta prueba si

Serial.available()

es cierto luego, a través de sentencias if similares, pruebo si el siguiente es el número '1' o '2' para la identificación de control, luego, si el número está activado o desactivado, '1' o '2'

Cuando pruebo esto en el monitor Serial o con datos reales de mi teléfono, nunca me conecto para entrar en los bucles o lo obtendré en uno y no en el otro. Algunas veces puedo modificarlo para que todos ellos enciendan el LED, pero luego no lo apago o viceversa

¿Alguien puede darme un ejemplo de la lógica que necesito usar? También he intentado usar las instrucciones de cambio para que la ID no tenga mucha diferencia

Gracias

    
pregunta Ashley Hughes

2 respuestas

2

Sin ver su código supongo, pero sospecho que está ingresando el código para analizar antes de tener disponible un comando serial completo. Entonces, a veces solo hay 1 byte disponible y otras 3 están ahí, de ahí el comportamiento impredecible.

Cambiaría la primera prueba a la siguiente:

if (Serial.available() >= 3)

Lo que esperará hasta que tengas un comando completo antes de realizar todas las pruebas.

/ y

    
respondido por el yergacheffe
2

Aunque no estoy familiarizado con la programación de Arduino, si tiene una serie de sentencias if como if (Serial.read () == 't'), creo que la primera probablemente está engullendo el carácter de la serie. puerto, y luego en la siguiente prueba si (Serial.read () == '1') el puerto estará vacío y el carácter se habrá ido.

En su lugar, desea guardar el carácter en una variable y luego probar la variable:

ch = Serial.read (); si (ch == 't')   ... de lo contrario si (ch == '1')   ...

etc.

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas