Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme

TEMA: Un ROV de agua dulce, con mando de PS2

Un ROV de agua dulce, con mando de PS2 1 mes 1 semana antes #1667

Oye que alegría, estamos ganado en calidad de miembros del foro, se han incorporado un Técnico Superior de Electrónica y Robótica Industrial, y un Técnico del CSIC, valla nivel.

Un saludo a todos.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Última Edición: por asesorplaza1.

Un ROV de agua dulce, con mando de PS2 1 mes 3 días antes #1683

Buenas tardes.

Estoy del mando hasta las narices, puede ser que esta tarde salga por la ventana.

Llevo ya 38 versiones o modificaciones del programa, y sigue sin funcionar correctamente, creo que el programa se ha mejorado bastante, pero sigue sin funcionar el dichoso mando.

Un saludo.
Adjuntos:

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Un ROV de agua dulce, con mando de PS2 3 semanas 4 días antes #1727

Buenas noches.

Sigo peleándome con el mando, pero eso ya no es digno de mención.

Os escribo por dos motivos, uno, porque no me he olvidado de vosotros ni de vuestra ayuda, y el segundo, porque he echo, mejor dicho, me han hecho el ya amigo Bigbadbob, un descubrimiento que nos puede venir bien a todos.

Se trata de la macro (F("texto"))

Yo no sabia que existía, a lo mejor vosotros si, y no estoy descubriendo la pólvora, pero no lo he visto en ninguno de vuestros proyectos.

Resulta que con esta macro, si se define bien, los "Serial.print", o los "Serial.println" no ocupan memoria, y se ejecutan igualmente, yo he reducido la memoria ocupada por el programa de un 26%, a un 7%, que se dice pronto, sin quitar ningún "Serial.print".

Yo la he implementado de la siguiente manera, lo único con lo que hay que tener cuidado es que solo se puede utilizar para los textos fijos, NO se puede utilizar cuando se imprime el dato de un sensor que esta variando continuamente.

#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

linea 154 del código Maestro

y luego en todos los "Serial.print" fijos

Serial.println (F("\n Controlador encontrado y configurado con exito"));

linea 273 del código, y siguientes.

Como podréis observar, el código ha cambiado bastante desde la ultima vez que lo publiqué.

Si queréis mas información sobre la macro (F("texto")), podéis buscarla en Internet, o mirar estos enlaces.

www.baldengineer.com/arduino-f-macro.html

heli.xbot.es/?p=519

arduino.stackexchange.com/questions/176/...ariables-in-a-string

donde explican el funcionamiento de la macro F mejor que yo

Un saludo.
Adjuntos:

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Última Edición: por asesorplaza1.

Un ROV de agua dulce, con mando de PS2 2 semanas 4 días antes #1764

Buenas tardes.

Bueno, pues parece que esto va tomando forma, y he averiguado varias cosas.

Como ya os he comentado, estoy registrado en un foro de construcción de ROV, con proyectos similares al mío, y tengo un tema abierto en este enlace.

www.homebuiltrovs.com/rovforum/viewtopic.php?f=18&t=1908

Es un coñazo, tener que escribir las preguntas en Español, y luego traducirlas al Inglés, menos mal que lo hago con el traductor de BING, pero aun así, es un lio, porque traduce lo que quiere y como quiere, y tengo que estar traduciendo y volviendo a traducir las frases, para comprobar que tengan sentido, pero bueno, a pesar de las dificultades he conseguido varios progresos.

El Americano que me está ayudando, Bigbadbob, después de mucho comentar como mejorar el programa, ha llegado a la conclusión de que el Arduino se hace un lio al tener que utilizar los dos Puertos Serie, a la vez que el bus SPI para controlar el mando, por lo tanto la mejor solución a la que hemos llegado, es que hay que separar lo que hasta ahora tenía como “Código Maestro”, en dos partes y en dos Arduinos, una parte del código en un Arduino que solo controle el mando, y otra parte del código que controle los sensores y mande los datos, de momento al ordenador, y después a la pantalla Nextion, en otro programa y en otro Arduino.

Como no se puede utilizar la Comunicación Serie, con la impresión de datos y con el mando de la PS2, todo junto, en un mismo programa y en un solo Arduino, por lo tanto, tengo que utilizar tres Arduinos, dos en el puesto de control, y uno dentro del ROV, y a demás así es como lo tiene el montado, después de un montón de tiempo intentando hacerlo de otras formas, y no sacando nada diferente en claro.

El sistema funciona de la siguiente manera.

El Arduino que está dentro del ROV, controla los sensores y solo manda por el puerto TX los datos a un Arduino, que está en el puesto de control, que los recibe por el puerto RX, los interpreta y los manda a la pantalla.

A su vez el mismo Arduino que está dentro del ROV, por el puerto RX, solo recibe los datos del mando PS2, y ejecuta las ordenes del mando.

Es un poco más lioso pero es la única manera de que funcione, pongo una foto para que veáis que no es tan complicado como resulta explicarlo escribiendo.



La foto no es para ganar un premio Pulitzer, pero se ve lo que os quiero decir.

Un saludo
Adjuntos:

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Tiempo de carga de la página: 0.174 segundos
Gracias a Foro Kunena