Buenas tardes. Estoy utilizando la comunicación Serial para transmitir datos entre 2 arduinos. El tema es que ambos transmiten una gran cantidad de datos por segundo, y cuando uno transmite y el otro también, se vuelve un choclo de datos. Claramente esto se soluciona haciendo que si un Arduino transmite, el otro no lo haga hasta que detecte que este dejo de transmitir.
El detectar que transmite es facil, con if( Serial.available>0) ya sale.Con esta sentencia hago que el Arduino escuche lo que se transmite por el puerto serie. El problema sale cuando ese ciclo if se termina, y el Arduino que estaba escuchando empieza a transmitir. En ese momento los monitores seriales de ambos lados empiezan a lanzar caracteres aleatorios. Supongo que es porque ambos arduinos, al tener distintas longitudes de código, en un momento terminan "hablando" los 2 al mismo tiempo por el puerto serie.
Entonces se me ocurrió que si pudiese leer el bit de Stop de cada transmisión Serial podría saber cuando el canal esta libre, y que ese Arduino después de escuchar, pueda transmitir. Alguien sabe como puedo detectar ese bit de stop?.
Otra forma que se me ocurrió, es calcular los uS que tarda cada bit en transmitirse dependiendo del BaudRate que les configure a ambos arduinos, esto podría hacerlo esperando la cantidad de tiempo multiplicado por los 8 bits de transmisión, y detectar si no hay datos en el puerto serial por el tiempo de los siguientes 2 bits. Pero no se cuanto tiempo tarda el Arduino en detectar el bit de Start con la sentencia Serial.available( ), y al no conocer ese dato, desconozco si leería los bits equivocos cuando quiero detectar los de STOP.
Intente utilizar la misma sentencia de if(Serial.available>0) else...... para transmitir en ese momento. Pero obtuve los mismos resultados. También intente negar el If(!Serial.available>0) pero nada. Asi que muero en la opción de leer el bit de Stop. Muchas gracias.