Hola a tod@s.
He estado revisando por Google y en la traducción de la página Arduino al Castellano, y no he encontrado o entendido información para realizar lo que os quiero exponer a continuación (Incluso en algunos casos la traducción esta incompleta o el código no es igual al original en ingles), sobre todo cuando he encontrado problemas en las traducciones. Si, tengo un problema con el ingles y en estos momentos es cuando me acuerdo cuando no lo estudie cuando tenía que hacerlo.
Estoy abierto a sugerencias de métodos de estudios para el ingles, aunque creo abre probado todo, menos la hipnosis, la dedicación ha tenido mucho que ver también X-)
Al grano:
El proposito es disponer de un Arduino en el que conectarle un Joystick formado por 2 potenciómetros (utilizando 2 entradas analógicas); un tercer potenciómetro (otra entrada analógica), y un pulsador (entrada digital). Leer los datos de estas entradas y mandarlas por el puerto serie para que un 2º Arduino lo reciba por puerto serie, y con los valores recibidos mover 2 servos (con los valores del joystick); controlar la velocidad y sentido de giro de un motor brushless (con el tercer potenciómetro); y con el valor del pulsador, controlar una salida digital.
Resumiendo. Utilizar un Arduino como una emisora de Radio Control, y el 2º Arduino como receptor de Radio Control. Después de crear el protocolo, el encampsular la comunicación serie en una señal inalámbrica será cuestión del elemento que acople al puerto serie en ambos Arduinos.
El conflicto lo tengo en el modo de mandar y recibir los datos por el puerto serie entre los dos Arduinos (Saber sacarle el partido a los comandos que controla el puerto serie).
Voy a compartir con vosotros una tormenta de ideas y luego una solución que he pensado, pero que no se si será la más correcta, y me gustaría me corrigierais si me equivoco, afirmarais si es cierto y me orientarais "en el buen camino".
Tormenta de ideas
-Con el comando "Serial.print" y "Serial.printlr" solo puedo mandar un único valor de una vez. Entonces, me obligo a realizar un envío por cada valor, no siendo posible mandar un carácter identificativo + un valor para identificarlo, algo como "x24" para saber que el dato "24" es para usarlo como "x".
-Con el comando "Serial.read" puedo leer los datos que están en el buffer del puerto serie. ¿Pero que leo?,¿un byte o 128 byte, que son los que tiene el buffer?
-¿De que manera puedo decirle al 2º Arduino que el dato que le llega es de tal sensor, para que luego lo utilice? o de otra manera ¿Como sabe el 2º Arduino que el dato que tiene en su buffer es el que espera para atacar a uno de sus elementos (servos, control motor o salida digital)?.
-Lo sencillo sería mandar en un solo envío por puerto serie un array con los datos de los sensores, y luego el 2º Arduino lee el buffer del puerto serie cada x tiempo ¿Se puede enviar o leer un array por puerto serie?
La idea que tengo para realizar el código:
Cambiar el concepto principal de: El Arduino Emisor es el que controla la comunicación mandando datos, y el Arduino receptor es tonto y solo mira lo que le llega por el puerto serie.
Por este otro concepto: Como solo puedo enviar y leer un dato en cada acción con el puerto serie, el Arduino Receptor será el que tome el control de la comunicación pidiéndole al Arduino emisor los datos que el necesita. Expongo el seudo código.
Seudo código
[Arduino Receptor] mando el carácter "x" por puerto serie, para que el Arduino emisor me envíe el valor del potenciómetro x del joystick.
[Arduino Receptor] bacio el buffer del puerto serie con el comando "Serial.fluch", y con la ayuda del comando "Serial.available" espero a que lleguen datos al buffer.
[Arduino Emisor] Estoy atendo al puerto serie con el comando "Serial.available" y cuando reciba una "x" envío el valor del potenciómetro del joystick con el comando "Serial.print"
[Arduino Receptor] Al recibir un dato por el puerto serie, lo entenderé como valor del eje X del joystick y lo utilizaré para mover el servo correspondiente.
Esto será idéntico con los demás sensores (potenciómetro eje Y del joystick, el potenciómetro para el control del motor brushless, y el pulsador para controlar la salida digital).
Dudas sobre mi solución: ¿No os parece que se realizan demasiadas llamadas al puerto serie para el envío de un solo datos?, y contra más datos, el tiempo en enviar todo se multiplica, a parte que penalizaré en consumo de batería de ambos Arduinos.
Espero haberme hecho entender.
Gracias por dedicarme unos minutos a leerme