Artículo WII HT Libre - Headtrackin con inclinometro

Discussion in 'R/C ELECTRÓNICA' started by cacer, Oct 28, 2009.

  1. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Si se lo que te pasa, es exactamente lo mismo que me paso a mi y tienes varias posibilidades.

    La primera y más importante es que no has inicializado correctamente el sensor. Hay que leerlo si mal no recuerdo 200 veces antes de tomar el valor de referencia cuando esta inmovil. Revisa el programa.

    PorFa pon el programa o envíamelo y le echo un vistacillo y te cuenta. A mi me gusta-ba más el PIC pero te aseguro que el ARDU me esta ayudando a cambiar de idea
     
  2. Ariel Miembro Activo

    Ariel
    Joined:
    May 29, 2009
    Messages:
    1,848
    Likes Received:
    2

    Pues esa es la solución que he tenido que hacer , muchas gracias .

    Lo extraño es que en los programas que hay publicados aquí, ninguno hace esas 200 mediciones antes, por eso pensaba que estaba haciendo algo mal.

    la verdad que el arduino tiene un par de cosas que son muy buenas , como por ejemplo la funcion millis() que los pic no tienen(o al menos yo no lo encontré aun) y que para jugar con precisión en los tiempos es muy útil.

    pues me tendré que comprar un par de arduinos para ponerme al día con ellos , aunque el ardupilot le he programado y modificado sin problemas dado la similitud en el lenguaje C.

    ahora estoy refinando el programa para que haga la calibración correcta y comentándolo un poco , para publicarlo a qui por si alguien le interesa hacerlo con pic, ya que se podría utilizar uno de 8 pines y soldarlo sobre la misma placa del WMP y así dejarlo muy pequeño.

    Un saludo y gracias de nuevo por la ayuda.
    Ariel

    Centro quedada ... Ya falta poco !!!
     
  3. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Hombre si te miras el programa que hemos publicado veras que si lo tiene. Si no tenias que hacer un reset para que funcionase correctamente

    Por favor podrías poner el código para el PIC aunque no esté terminado, me gustaria verlo por si me anímo con el también :locos:

    Saludos
     
  4. Ariel Miembro Activo

    Ariel
    Joined:
    May 29, 2009
    Messages:
    1,848
    Likes Received:
    2

    Mejor aún , he publicado un Tema nuevo con el código y toda la historia.

    PIC HT con WM+

    Echadle un ojo , y asi entre todos logramos sacarlo adelante y que sea una opcion mas para los pic_lovers.

    Un saludo
     
  5. Ariel Miembro Activo

    Ariel
    Joined:
    May 29, 2009
    Messages:
    1,848
    Likes Received:
    2
    Me podeis explicar por favro , que hace esta parte del codigo?

    Code:
      if (bitRead(data[4],1)==1){
          pitch=((data[5]>>2)<<8)+data[2]-pitch0; 
          if (abs(pitch) <50) pitch=0;     
      } 
      else
      {
          pitch=(((data[5]>>2)<<8)+data[2]-pitch0)*5;
      }  
      if (bitRead(data[3],1)==1){
          yaw=((data[3]>>2)<<8)+data[0]-yaw0;
          if (abs(yaw )<30) yaw=0;
      }
      else
      {
          yaw=(((data[3]>>2)<<8)+data[0]-yaw0)*5;      
      }
    
    

    esta en la funcion receiveData()

    es que no puedo entender por que hace esos if del bit 1.

    un saludo
    Ariel
     
  6. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    que parte es la que quieres que te explique?

    Bueno te cuento y si no es lo que quieres preguntas de nuevo.

    Code:
      if (bitRead(data[4],1)==1){
          pitch=((data[5]>>2)<<8)+data[2]-pitch0; 
          if (abs(pitch) <50) pitch=0;     
      } 
      else
      {
          pitch=(((data[5]>>2)<<8)+data[2]-pitch0)*5;
      } 
    El otro if hace exactamente lo mismo pero en el YAW

    Como sabes el wm+ genera 2 bytes por eje. 14bit es el angulo girado y luego tiene 2 de control

    Lo primero que hacemos es determinar si el movimiento es rápido o lento.
    si el bit 1 de data[4] es 1 se determina que el movimiento es lento.
    Despues determinamos cual es el angulo recorrido.

    pitch=((data[5]>>2)<<8)+data[2]-pitch0;

    y si es menor de 50 suponemos ruido y acumulamos 0.

    Si el movimiento es rápido hacemos lo mismo pero deberíamos multiplicar por 4 y no por 5 como puse.
    Pero como no he conseguido tener movimiento rápidos no acumula error.

    Si necesitas algo má dude en preguntar.

    De todas las maneras si te lees el hilo entero esta la explicación de los valores que devuelve el WM+
     
  7. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Uno no, alguno más que amaba los PIC y por culpa del ardu los abandone.

    De todas las maneras es por hacer algo con ellos. el Ardu tiene las siguientes ventajas.

    Plataforma estandar con sistema de programación gratuito y muuuuchas librerias adaptadas a nuestro hobby.

    Lenguaje C , microplaca ya preparada y no se que más
     
  8. Ariel Miembro Activo

    Ariel
    Joined:
    May 29, 2009
    Messages:
    1,848
    Likes Received:
    2
    Muchas Gracias , ahora entiendo un par de errores que tenia.
    No sabia eso del bit que indicaba que el valor leído esta dividido por 5.
    Pero todo es mi culpa , por no leer hasta el final la explicación de wiibrew.

    ahora me va todo de maravillas, antes al moverlo rápidamente me daba falsas lecturas.:icon_eek:

    voy a corregir el codigo en el tema de la version PIC.

    Saludos
     
  9. Ariel Miembro Activo

    Ariel
    Joined:
    May 29, 2009
    Messages:
    1,848
    Likes Received:
    2
    Tengo un problema a la hora de configurar el trainer en la FF9 para el HT.

    resulta que si cambio de modelo se me pone la configuracion por defecto (Trainer deshabilitado y canales 1 al 4 en FUNC y el resto de canales en OFF).

    Esto es normal? o mi emisora tiene algun defecto?
    Es la T9CP pcm124 con el modulo CAMPac , pero utilizo los modelos primeros de la memoria interna.

    Lo raro es que si apago la emisor no se pierde la configuración , solo cuando cambio de modelo.

    Un saludo
     
  10. HMR Miembro

    HMR
    Joined:
    Feb 17, 2009
    Messages:
    262
    Likes Received:
    0
    Hola a todos
    Otro WiiHt funcionando !!!!! Falta resguardar la electrónica en una cajita y a probar en el campo de vuelo.
    Quería agradecerles a todos los que aportaron para que pudiera ser posible armar este artilugio y de una manera tan sencilla !!!!! En especial al NONO y Cacer, Fbforos. Genios totales !!!! :party:

    En principio los dos radios futaba 7 y 9, que tengo no me habilitaban la función Trainer y me quede trabado en esta situación.:confused:
    Medí con el Osciloscopio y el tren de pulsos de salida en el Arduino era muy estrecho y no concordaba la velocidad con la salida PPM del radio.
    El problema lo cree yo eligiendo mal el modelo de Arduino en el soft programador. Elegí un chip a 8Mhz y yo tengo un pro mini de 16Mhz. :locos:

    Evidentemente las radios Futaba no habilitan el modo Trainer si no reconocen como correcta la trama PPM que entra en la radio.

    Les dejo la posición correcta en el soft de programación para Arduino pro mini 328 5vcc a 16Mhz y quien tenga este problema pueda verificar.
     

    Attached Files:

  11. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Felicidades!!!! :party::party:

    Me alegro que te funcione y gracias por aportar el error, consecuencia y solución. De esto se aprende y mucho.
     
  12. HMR Miembro

    HMR
    Joined:
    Feb 17, 2009
    Messages:
    262
    Likes Received:
    0
    Hola a todos
    Gracias CASER !!!!
    Y acá esta el pequeñín en su caja con switch´s y todo.
    Use un sobre de plástico para memorias SD, papel aluminio para la aislación contra RF y un poco de aislante térmico para evitar roturas por caídas accidentales. Pesa tan poco que acoplado a las gafas no hace diferencia. Lujo total !!!!!
     

    Attached Files:

  13. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Gente como estan!!!

    He estado medio perdido con este proyecto por una cuestión de falta de tiempo. Sin embargo he visto la evolución que ha tenido este y es algo que realmente me da mucha alegría.

    Yo por mi parte estoy esperando tener nuevamente algo de tiempo como para retomar el tema del arduino en el fpv ya que creo que hay mucho que se pueda hacer con el.

    En el tintero tengo dos proyectos para comenzar:

    1) Estabilizador de camaras con Arduino y sensor Wii
    2) Cuadrocoptero con Arduino y sensor Wii

    Ustedes que opinan? se animan?? :wink2::wink2:

    En relación a esto y buscando info por la internet di con algunos documentos que nos pueden ser muy útiles para solucionar el tema de la perdida de centro del Wii Headtracker, paso los links para que le den una leída:Saludos

    El Nono
     
  14. acristóbal Gurú FPV

    acristóbal
    Joined:
    Oct 9, 2006
    Messages:
    3,636
    Likes Received:
    1
    Gracias, gracias y gracias Cacer, Nono y Fbforos y también a HMR que gracias a su problema (y solución) ya he conseguido solucionar el problema de mi WiiHT,

    :party:Ya está funcionando:party:
    Ahora a trastear con el código para configurarlo a mi gusto.
     
  15. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Primero Felicidades Acristobal. Otro más para la saca :party::party:

    Nono, ¿Que tal estas? Me alegra verte por el foro. Tus ideas, como siempre, fantásticas.

    Yo he comenzado con el Aeroquad. Que usando el Arduino se monta un Quadcopter. De momento usando la IMU de Sparkfun, pero ya con la idea de montar el WM+. Entra en el hilo y te invito desde ya a la apertura de uno nuevo.

    Los documentos, muy interesantes. Buena aportación. :worthy:

    Otra idea de Sinver, es ver si el micro del WM+ es un Atmega, que por lo que he podido ver, tiene toda la pinta, aunque no he seguido todos los pines del circuito, puede que si lo sea. Esto nos permite descargar al Ardu de las lecturas y filtros en este micro, pasando solo la lectura final incluso que el estabilizador de camara, no requira un ARdu ya que lo incorpora, al igual que el Head como bien comenta Sinver.

    No te comenté que ya tengo el Oscilo como el tuyo y me está dando muchas alegrías y que también tengo medio desarrollado partiendo de otro, un pequeño oscilo con el Arduino y proccesing, lo que nos permitirá jugar cn las lecturas del quad.

    Pues eso... Que yo ya me he apuntado a tus proyectos :rolleyes2:

    La unión hace la fuerza y es mucho más divertido y rapido...
     
    #515 cacer, Mar 8, 2010
    Last edited: Mar 8, 2010
  16. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Gente!!

    Gracias HMR!! me alegra que ya estés "a full" con tu arduino!! :wink2:

    Nooooooo!!!!!!!!! no te puedo creeerrrr!!!! :icon_eek::icon_eek::icon_eek::icon_eek:

    Me estaba volviendo loco con otro proyecto con el Arduino en el que necesitaba leer unos datos por el serial y no me coincidían los baudios y era por eso!!!! tenia mal seleccionado el board!!!!! :party::party::party::party:

    Ya estaba maldiciendo a la ultima version del Adruino IDE. :wink2:


    Seeee!!! muchas ideas en mente y poco tiempo para llevarlas adelante!! :sad::sad::sad: me parece que voy a tener que comenzar a trasnochar nuevamente como cuando estaba con este proyecto. :wink2::wink2:

    Ya le voy a dar una leida mas atenta a ese hilo ya que es un buen punto de partida.

    Has visto que para este tipo de proyectos va como anillo al dedo!!! es por ello que se los recomendaba a todos. :baba:
    Apa!! y eso de un osciloscopio con un arduino!! eso también suena muy interesante!

    Obvio!! nunca mejor demostrado como en este hilo!!

    Un saludo grande!

    El Nono
     
  17. manolozzzz Miembro

    manolozzzz
    Joined:
    Sep 25, 2008
    Messages:
    128
    Likes Received:
    0
    Yo, aunque no haya dicho nada, estaba siguiendo el hilo, ya tengo todo lo necesario, pero resulta que mi FTDI es del ardupilot y corre a 3,3 V y no tiene el pad de soldadura para ponerlo a 5V, a ver si me podéis decir como ponerlo al miniarduino para que le pueda cargar el código.
    Salu2
    Manolo.
     
  18. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Manolo!!

    ya has probado de conectarlo igual??? mira que puede que funcione sin problema!! :wink2:

    Saludos!!

    El Nono
     
  19. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Aunque casi seguro que funciona, otra opcion es alimentar el Ardu de forma externa y no conectar el pin de 3.3.
     
  20. manolozzzz Miembro

    manolozzzz
    Joined:
    Sep 25, 2008
    Messages:
    128
    Likes Received:
    0
    Hola a todos:
    Ya que la tensión suministrada es inferior probare tal cual, no creo que me lo cargue, si no funcionase ya probare la opcion de alimentarlo con un BEC o algo asi.
    Salu2
    Manolo.
     
  21. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Tienes una tercera alternativa: Sacar los 5v del conector usb.

    Recuerdo no se en que hilo, publicaron como y donde cortar la pista para no alimentar con 3.3. y sacar el 5 V directo.

    De todas formas, con un polimetro y mirando el pinout del conector te lo curras en unos minutos.

    La opcion del BEC es perfecta o la del USB.. Tb..
     
  22. acristóbal Gurú FPV

    acristóbal
    Joined:
    Oct 9, 2006
    Messages:
    3,636
    Likes Received:
    1
    Esa solución la tienes en el hilo de la modificación FTDI 3,3 a 5 V

    SALUDOS
     
  23. pepeleshe Nuevo Miembro

    pepeleshe
    Joined:
    Nov 1, 2006
    Messages:
    69
    Likes Received:
    0
    Hola Manolo.

    Para programar no debes tener problema, eso si, recuerda que depues de programado si lo tienes que alimentar a 5 v para que corra a 16 Mhz.

    Saludos.
     
  24. manolozzzz Miembro

    manolozzzz
    Joined:
    Sep 25, 2008
    Messages:
    128
    Likes Received:
    0
    Hola a todos,
    A ver, os cuento un cuento, la opción elegida parece funcionar, al conectar el mini al usb tal cual, se enciende un led rojo y uno verde que parpadea y luego se apaga.
    Le mando el archivo y, tras una secuencia de parpadeos de todos los leds de las 2 cosas, se quedan fijos encendidos el verde y el rojo, creo que estará correcto ya que la carga no refleja ningún problema, he tenido que probar hasta dar con la configuración correcta e instalar los drivers, ya que el ordenador es nuevo y nunca lo había instalado.
    A ver los especialistas si me pueden confirmar que esta correcto o no.

    @ acristóbal: Ya vi el post, si miras de los últimos comentarios veras porque no he podido, este FTDI es diferente y no me apetece mucho de trastearlo mas, decidí probar así, creo que estará correcto, espero solo confirmarlo.
    Salu2
    Manolo.
     
  25. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Manolo!!

    Una buena manera de probar que se este cargando correctamente el código y que el arduino este funcionando correctamente es mediante alguno de los ejemplos que trae el Arduino IDE, puedes cargar por ejemplo el que se llama "blink" que hace que el led del parpadee o el que se llama "ACIItable". Este ultimo hace que te aparezca todo el codigo ASCII en el terminal serial.

    Saludos

    El Nono
     
  26. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Acristobal,

    Este es uno más de los que he visto si señor.

    Creo que nos estamos repitiendo en dos hilos distintos, por lo que propongo que se siga esta charla en el del FTDI.

    ¿No os parece?
     
  27. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Gente!!

    Estos últimos días he estado realizando algunos pequeño cambios en el codigo del Headtracker. :biggrin2::biggrin2::biggrin2:

    Por un lado, decidí usar un array de datos a donde almacenar las lecturas del WM+ para luego promediar el valor de todas y tomar este como valor a utilizar.
    Me parece que de esta forma se obtienen valores mas "limpios" y precisos y hasta parecería haber menos desplazamiento del centro.

    La otra mejora ha sido en el procedimiento de calibración. Ahora hago que este se realice solo si se inicia con el botón de centrado oprimido. De esta forma se almacenan los valores de calibración en la eeprom y ya no es necesario encender el HeadTracker completamente inmóvil. :biggrin::biggrin: algo simple de hacer en casa pero complicado de llevar a cabo en el campo de vuelo. :wink2:
    Es decir que ahora solo se requiere dejar completamente inmóvil el headtracker en el caso de que sea necesaria una re-calibración. :worthy:


    Para no confundir con tantos códigos distintos, le pase las mejoras a FBforos para que el las incorpore en el ultimo código disponible. :wink2:

    Saludos.

    El Nono
     
  28. manolozzzz Miembro

    manolozzzz
    Joined:
    Sep 25, 2008
    Messages:
    128
    Likes Received:
    0
    Ambas pruebas son correctas.
    Ahora vienen mis dudas de código.
    Yo tengo una FF9 con programación de canales de training, necesito hacerlo lo mas simple posible, y usare los canales 6 y 7.
    También quería saber si se puede implementar que algún otro pad sea GND para no duplicar los cables en el mismo pad.
    Salu2
    Manolo.
     
  29. cacer Miembro Activo

    cacer
    Joined:
    Jan 3, 2008
    Messages:
    1,136
    Likes Received:
    0
    Hola Nono,
    Buena mejora maestro... :worthy:

    Cuando esté lista la ponemos como version en el primer post.
     
  30. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Una cosa mas que me olvidaba...

    A todos aquellos que le gusta la programacion y el Arduino les recomiendo ver esto: SerialChart.

    Saludos!

    El nono
     
  31. IvanA3 Maestro FPV

    IvanA3
    Joined:
    Apr 23, 2008
    Messages:
    2,460
    Likes Received:
    1
    Hola,

    Pues yo no consigo que funcione...

    En el Serial veo los anchos de los pulsos de 1000 a 2000 en los dos ejes pero cuando lo conecto a la emisora FF9...nada de nada...y a veces cuando inicio el WII+ se mueven poco a poco los servos pero cuando muevo el sensor...zas, se para el trainer y lo puedo manejar con la emisora...

    Esto es porque no se generan bien los pulsos o algo así...

    El código es el último y los canales 5 y 6 los pongo en FUNC en la emisora...

    Es raro...

    Saludos.
     
  32. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Pregunta

    Cuando compilas tienes comentado

    // #define NOTRAINNER

    que circuito tienes montado de los dos?

    Si quieres pasame el programa por privado y le reviso, pero por lo que cuentas me da que estas usando la version del programa para emisoras que no tiene modulo de trainer
     
  33. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Bueno pues de nuevo por aqui para añadir una serie de mejoras.
    La verdad es que no he podido probarlas en el campo de vuelo.

    El nono ya comento alguna de ellas.

    --La primera es el guardar la calibración de los giroscopos en la EEPROM del atmel, para que sea más fácil su uso he añadido un led conectado al pin D13 del arduino. En este pin ya esta colocado un LED verde que va en la placa. Pues bien he añadido uno adicional para poder verlo desde fuera.

    --La segunda no la tengo tan clara ya que no la he podido probar en el campo, el NONO afirma que le funciona mejor. Se basa en utilizar un promedio de muestras. Como utilizarla

    // #define MUESTREO

    Si quitamos el comentario '//' el programa se compilará con el código para muestreo y si le dejamos el comentario con el actual.

    -- Tambien le he añadido un pequeño control para evitar que pequeños movimientos de la cabeza hagan temblar los servos.

    Todo esta perfectamente documentado. Tener en cuenta que es necesario que compileis el programa correcto comentando o descomentando las distintas opciones.


    Funcionamiento del nuevo sistema para el almacenamiento de la calibración
    Bien si alimentamos el HTWM+ sin pulsar el boton de centrado, leemos la calibración que tenemos almacenada en memoria y la usamos.
    Si alimentamos el HTWM+ pulsando el boton de centrado o pulsamos el botón de reset mientras mantenemos pulsado el boton de centrado, entraremos en el proceso de calibración. Cuando el led parpadee la primera vez podremos soltar el boton de centrado. A partir de aqui parpadeará 3 veces más antes de que al quinto parpadeo calibre y guarde en memoria. Es sumamente importante el que el HTWM+ este completamente quieto antes de que se encienda por quinta vez el LED.

    Si no quereis poner un LED adicional intentar que el LED verde interno quede visible desde el exterior.
    Dada la gran cantidad de LED existentes en el mercado no he puesto ningun valor a la resistencia.

    Como mi LED es blanco de alta luminosidad se alimenta a 3 V y consume unos 30mA como el ARDU se alimenta a 5 queda que 5-3=2V
    2V/0,030A= 66,6 ohmios la resistencia (75ohms creó que es la que usé)

    Pasamos a la version 1.00 definitiva ya que creo que funciona correctamente :laugh:

    Code:
    /*#####################################################################################
    ## Wii HeadTracker    Version:  1.00                              Marzo 2010         ##
    ##                                                                                   ##
    ## Autor: El Nono, Cacer, Fbforos y el foro                                          ##
    ## Colaboracion:  www.aeromodelismovirtual.com                                       ##
    ##                www.fpv-bsas.com.ar                                                ##
    ## Documentacion:                                                                    ##
    ##                                                                                   ##
    ## http://www.aeromodelismovirtual.com/showthread.php?t=4300                         ##
    ## http://randomhacksofboredom.blogspot.com/2009/06/wii-motion-plus-arduino-love.html##
    ## http://www.windmeadow.com/node/42                                                 ##
    ## http://ingenegros.com.ar/Microcontroladores/leer-un-wii-nunchuck-con-arduino.html ##
    ## http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus             ##
    ## see http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus         ##  
    ## for info on what each byte represents                                              ##   
    #####################################################################################*/
    
    /* Yaw data[]    3 y 0 
       Pitch data[]  4 y 1
       Roll data[]   5 y 2
       Estos Pich y Roll pueden intercambiarse según se monte el sensor para hacerlo 
       Buscais las lineas donde aparece data[4]   data[1] y las sustituis por 
       data[5] y data[2] o viceversa
    */
    /*  NOTRAINER
        Si en nuestra emisora no podemos seleccior que canales serán controlados por
        el sistema de trainner dejaremos descomentada la línea NOTRAINER si por el contrario
        en nuestra emisora podemos controlar que canales seran manejados por el trainner
        comentraremos esta linea 
    */
    
    // #define NOTRAINNER  
    
    /* MUESTREO
      Hace un muestreo n lecturas, calcula la media y procesa la nueva posición de los servos.
      Tienes que tener en cuenta que ralentiza el movimiento de los servos.
      si lo quieres usar tienes que quitar el comentario al #define correspondiente 
    */
    
    //#define MUESTREO
    
    /* FB 
        Esto sirve para poder jugar con los parámetros que hay dentro de esta definición
        en el programa. Cuando lo comentais se cogen los parámetros estandar.,
    */
    
    // #define FB    //Coge mis parámetros del servo, comentar si quereis que los servos
                 // tengan recorrido estandar.
    
    #include <Wire.h>
    #include <avr/eeprom.h>
    
    // ************** OPCIONES DE CONFIGURACION ****************************
    int pitch_reverse = 0;  // Invierte servo TILT   0 = normal  1 = Reverse
    int yaw_reverse = 1;    // Invierte servo PAN    0 = Normal  1 = Reverse
    int pitch_gan = 600;     // Relación entre angulo girado por la cabeza y el girado por
    int yaw_gan = 600;       // el servo a mayor x_gan menor es en angulo girado
    int SwitchPin = 5;      // Ubicacion del interrupter de centrado
                            // conectar un pulsador NA a masa
                            
    int ppmOutPin = 4 ;    // Salida de datos al trainner port
    int ppmInPin = 2 ;     // Entrada de datros del trainner port futura actualizacion
                           //   otras frec. distintas de 35 y 72
    int canales = 6;       // Canal a partir del cual añadiremos el HT  / Canales que se generan                       
    
    // Variables actualización
    
    int refreshTime1= 8;    // Intervalo de generar trama 
    long lastPulse1 = 0;
    
    /*    Recorrido maximos de los servos - -2000, 2000 corresponde a un pulso de 1000 a 2000ms
          y es el estandarModificando los valores podemos ajustar el recorrido del servo no utilizar
          valores por encima de +-2500 puede no funcionar
          Si probais los valores FB vereis que el recorrido del servo esta recortado en el pitch
    */
    #if defined FB
      int pitch_min = -2200; // TILT Minimo
      int pitch_max = 900;  //      maximo
      int yaw_min = -2300;   // PAN  Minimo
      int yaw_max = 2400;    //      Maximo
    #else
      int pitch_min = -2000; // TILT Minimo
      int pitch_max = 2000;  //      maximo
      int yaw_min = -2000;   // PAN  Minimo
      int yaw_max = 2000;    //      Maximo
    #endif
    
    
    //Variable usadas para el muestreo
    #if defined MUESTREO
    #define NumMuestras 30
    int muestras= NumMuestras;
    int arrayYaw[NumMuestras];  
    int arrayPitch[NumMuestras];
    long SumYaw, SumPitch ;
    int n = 0;
    
    #endif
    
    //**********************************************************************
    
    volatile int estado = 1 ;
    volatile int numPulsos= 0;
    volatile int reposo=0;
    volatile unsigned long time=0;
    
    byte data[6]; //six data bytes
    int yaw, pitch;
    int yaw0, pitch0; //calibration zeroes
    long pitch_bak1, yaw_bak1; //acumula el movimiento
    int pitch_bak2, pitch_bak3; // variables auxiliares
    int yaw_bak2, yaw_bak3 ;
    int ledPin = 13;
    
    int pulseWidthP = 0, pulseWidthY = 0;
    int pulseWidthAntP = 0, pulseWidthAntY = 0;
    int CentPulseP = 1500;   //  Posicion centrada del servo Pitch
    int CentPulseY = 1500;   //  Posicion centrada del servo Yaw
    //Si modificamos los valores anteriores podemos conseguir modificar punto central
    // de los servos de pan y tilt
    //int dtime = 10;
    //int t = 0;
    int servoPin=7, servoPin2=6; //Salida de pruebas para servos
    
    void wmpOn()  // Inicializa el Wii Motionplus
    {
      Wire.beginTransmission(0x53); //WM+ starts out deactivated at address 0x53
      Wire.send(0xfe); //send 0x04 to address 0xFE to activate WM+
      Wire.send(0x04);
      Wire.endTransmission(); //WM+ jumps to address 0x52 and is now active
    }
    
    void wmpSendZero()
    {
      Wire.beginTransmission(0x52); //now at address 0x52
      Wire.send(0x00); //send zero to signal we want info
      Wire.endTransmission();
    }
    
    void calibrateZeroes(){  // Proceso de calibracion del motionplus al inicio
    
      for (int i=0;i<500;i++)       //Vacía el buffer del WM+ de basura
      {                             // antes de calibrar el dispositivo
        wmpSendZero();
        Wire.requestFrom(0x52,6);
        for (int i=0;i<6;i++){
          data[i]=Wire.receive();
        } 
      }
      for (int i=0;i<10;i++)
      {
        wmpSendZero();
        Wire.requestFrom(0x52,6);
        for (int i=0;i<6;i++){
          data[i]=Wire.receive();
        }
        yaw0+=(((data[3]>>2)<<8)+data[0])/10; //average 10 readings
        pitch0+=(((data[5]>>2)<<8)+data[2])/10;
    
      }
    }
    
    void siguePPM ()         // Se encarga de seguir la trama de entrada
    {
        if (millis() - time < 4 )
          {
            if (numPulsos <= (canales*2))
            {
                digitalWrite(ppmOutPin, estado);
                numPulsos = numPulsos + 1;
                estado= !estado ;
                time = millis();
            }
            else
            {
              updatePPM();
              time = 0;
              estado= HIGH; 
            }
          } 
          else 
          {
           digitalWrite(ppmOutPin, estado);
           estado= !estado ;
           numPulsos = 1;
           time = millis();
          }  
    }
    
    void receiveData()  // Recibe y procesa los datos del motionplus
    {
     // digitalWrite(ledPin, HIGH);  
      wmpSendZero(); //send zero before each request (same as nunchuck)
      Wire.requestFrom(0x52,6); //request the six bytes from the WM+
      for (int i=0;i<6;i++){
        data[i]=Wire.receive();
      }
     // digitalWrite(ledPin, LOW);
      
      if (bitRead(data[4],1)==1){
          pitch=((data[5]>>2)<<8)+data[2]-pitch0; 
          if (abs(pitch) <100) pitch=0;     
      } 
      else
      {
          pitch=(((data[5]>>2)<<8)+data[2]-pitch0)*4;
      }  
      if (bitRead(data[3],1)==1){
          yaw=((data[3]>>2)<<8)+data[0]-yaw0;
          if (abs(yaw )<150) yaw=0;
      }
      else
      {
          yaw=(((data[3]>>2)<<8)+data[0]-yaw0)*4;      
      }
      if (pitch_reverse == 1) pitch*=-1;
      if (yaw_reverse == 1) yaw*=-1;
    }
    
    void updateServo()  // Calcula el ancho del pulsos para cada servo
    {
          // ************** pitch *******************************
         //pitch_bak2= (pitch_bak1 += pitch)/pitch_gan;
         pitch_bak3 = constrain(((pitch_bak1 += pitch)/pitch_gan),pitch_min,pitch_max);
         pulseWidthP = (pitch_bak3/4)+CentPulseP;
        // ************ Control para pruebas pitch*********************
        // ** Quitar el comentario a las 2 lineas siguiente para monitorizar con el arduino *******
        // ** Recordar que hay que comentar de nuevo antes del uso definitivo
        
        //Serial.print("\t pulse: ");   Serial.print(pitch); Serial.print("\t ");Serial.print(pitch_bak1); 
        //Serial.print("\t ");  Serial.print(pitch_bak2); Serial.print("\t ");Serial.print(pitch_bak3); Serial.print("\t "); Serial.println(pulseWidthP);
        
        // ************* yaw **********************************    
         //yaw_bak2=(yaw_bak1 += yaw)/yaw_gan  ;
         yaw_bak3 = constrain(((yaw_bak1 += yaw)/yaw_gan),yaw_min,yaw_max);  
         pulseWidthY = (yaw_bak3/4)+CentPulseY;
    
        // ************ Control para pruebas *********************
        // ** Quitar el comentario a las 2 lineas siguiente para monitorizar con el arduino *******
        // ** Recordar que hay que comentar de nuevo antes del uso definitivo
        
        //Serial.print("\t pulse: ");   Serial.print(yaw); Serial.print("\t ");Serial.print(yaw_bak1); 
        //Serial.print("\t ");  Serial.print(yaw_bak2); Serial.print("\t ");Serial.print(yaw_bak3); Serial.print("\t "); Serial.println(pulseWidthY);  
    }
    
    void updatePPM()  // Añade los canales del HT 
    {
      //Las siguientes lineas evitan que pequeños movimientos de las cabeza provoquen un temblequeo de los servos
    /*  if (abs(pulseWidthY-pulseWidthAntY)< 20)
      {
           pulseWidthY=pulseWidthAntY;
      }
      else
      {
          pulseWidthAntY=pulseWidthY;
      }
      
        if (abs(pulseWidthP-pulseWidthAntP)< 20)
      {
           pulseWidthP=pulseWidthAntP;
      }
      else
      {
          pulseWidthAntP=pulseWidthP;
      }
      */
      #ifndef NOTRAINNER
         // >>>> Genera los primeros canales ficticios <<<<<<<<<
        for (int i=0; i < canales; i++)   // Envia el pulso ficticio de nº canales
        {
          digitalWrite(ppmOutPin,LOW);
          delayMicroseconds(400);
          digitalWrite(ppmOutPin, HIGH);
          delayMicroseconds(650);
        }
        digitalWrite(ppmOutPin,LOW);
        delayMicroseconds(400);
      #endif  
    
        // >>>> Canal "pan" (Canales+1)  <<<<<<<<<
        digitalWrite(ppmOutPin,HIGH);
        digitalWrite(servoPin2, HIGH);    
        delayMicroseconds(pulseWidthY-400);
      
        // Pulso de separacion de canales 
        digitalWrite(ppmOutPin,LOW);
        delayMicroseconds(400);
       digitalWrite(servoPin2, LOW);
       digitalWrite(servoPin, HIGH);
        
        // >>>> Canal "tilt" (Canales+2) <<<<<<<<<
        digitalWrite(ppmOutPin,HIGH);
        delayMicroseconds(pulseWidthP-400);
    
       // Pulso de separacion de canales 
        digitalWrite(ppmOutPin,LOW);
        delayMicroseconds(400);
        digitalWrite(ppmOutPin,HIGH);
        digitalWrite(servoPin, LOW);
      #if defined NOTRAINNER   
        delayMicroseconds(500);
      #endif    
    }
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(ppmOutPin, OUTPUT);  
      pinMode(ppmInPin, INPUT);   
      pinMode(ledPin, OUTPUT);  
      pinMode(servoPin, OUTPUT);   
      pinMode(servoPin2, OUTPUT);  
      pinMode(SwitchPin, INPUT);
      digitalWrite(SwitchPin,HIGH); //Pull_up entrada switch centrado
      digitalWrite(ppmOutPin,HIGH);
      Wire.begin();
      wmpOn(); //turn WM+ on
      if (digitalRead(SwitchPin) == 0) {    // Si se mantiene oprimido el boton de centrado en el momento del encendido se realiza el 
                                            // proceso de calibracion.        Atencion:  TIENE QUE ESTAR COMPLETAMENTE QUIETO !!!! 
                                            // El LED Verde o el incorporado parpadeará 4 veces, a la quinta se produce la lectura y
                                            //almacenamiento de los datos.      
           for (int i=0;i<4;i++){
             digitalWrite(ledPin, HIGH);
             delay (500);
             digitalWrite(ledPin, LOW);
             delay(500);
          }
          digitalWrite(ledPin, HIGH);
          delay(1000);
          calibrateZeroes();   
          eeprom_write_word((unsigned int*)0X04,pitch0);   // Graba offset de pitch en eeprom
          eeprom_busy_wait();                              // Espera que la grabacion finalice
          eeprom_write_word((unsigned int*)0X08,yaw0);     //  Graba offset de yaw en eeprom
          eeprom_busy_wait();                         
          delay(500);
          digitalWrite(ledPin, LOW);
          
       }
       else{
         digitalWrite(ledPin, HIGH);
         pitch0 =(int)eeprom_read_word((unsigned int*)0X04);  // Lee de eeprom el valor de pitch0
         yaw0   =(int)eeprom_read_word((unsigned int*)0X08);  // Lee de eeprom el valor de yaw0
         delay(200);
         for (int i=0;i<500;i++)       //Vacía el buffer del WM+ de basura
         {                         
             wmpSendZero();
             Wire.requestFrom(0x52,6);
             for (int i=0;i<6;i++){
               data[i]=Wire.receive();
             }
         }
         digitalWrite(ledPin, LOW);
       }     
        
    #if defined NOTRAINNER
      attachInterrupt(0,siguePPM, CHANGE);
    #endif
    
    }
    
    void loop()
    {
    #if defined MUESTREO
       if (n == muestras-1) {   // Si la muestra actual supera al valor definido vuelve a cero
          n = 0;
        }    
        receiveData(); 
        updateServo();
        SumPitch = SumPitch-arrayPitch[n]+pulseWidthP;
        SumYaw  = SumYaw-arrayYaw[n]+pulseWidthY;
        arrayPitch[n] = pulseWidthP;  // Recolecta los valores en el array de muestreo
        arrayYaw[n] = pulseWidthY;   
        n++;                         // Incrementa la muestra actual 
        pulseWidthP = SumPitch/(muestras);  // tomo como valores de Tilt y Paneo al promedio de todo el muestreo
        pulseWidthY  = SumYaw /(muestras);
    #else
    
        receiveData(); 
        updateServo();
    #endif
        
    
        
    #ifndef NOTRAINNER    
        if (millis() - lastPulse1 >= refreshTime1){   // Genera la trama PPM
            updatePPM(); 
            lastPulse1 = millis();
           } 
     #endif     
     
       if (digitalRead(SwitchPin) == 0) {
         digitalWrite(ledPin, HIGH);
        pulseWidthP = CentPulseP;
        pitch_bak1 = 0;
        pulseWidthY = CentPulseY;
        yaw_bak1 = 0;
        digitalWrite(ledPin, LOW);
      }
    }
     
    #533 fbforos, Mar 28, 2010
    Last edited: Apr 14, 2010
  34. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Aqui encontrareis los esquemas modificados.

    Si vuestra emisora no tiene opción de trainer o quereis utilizar el sistema con un módulo de RF externo, es imprescindible que construyais siguiendo el esquema NOTRAINNER. Puede que el normal os funcione pero no es seguro debido a que la señal de trainer que sale de la emisora puede no ser reconocida correctamente por el arduino
     

    Attached Files:

  35. IvanA3 Maestro FPV

    IvanA3
    Joined:
    Apr 23, 2008
    Messages:
    2,460
    Likes Received:
    1
    Hola fbforos...

    Si tengo comentado el notrainer y el circuito es el más sencillo...

    A veces funciona y cuando muevo mucho el sensor deja de funcionar...
    Puede que no tenga los valores de tension adecuados en los pulsos hacia la emisora? Voy a ver si puedo ver los pulsos con el pc...no tengo osciloscopio...

    Me da una rabia que no funcionen las cosas a la primera...!!! :laugh:
     
  36. IvanA3 Maestro FPV

    IvanA3
    Joined:
    Apr 23, 2008
    Messages:
    2,460
    Likes Received:
    1
    Ja JA!!!!

    Ya funciona...

    El problema eran las malditas interferencias de la propia radio...como lo tengo todo juntito y al aire para probar, cuando subía la antena de la emisora me dejaba de funcionar y cuando la bajaba funcionaba...jejeje

    Lo único que tengo que hacer es protegerlo un poco de las interferencias con aluminio y listo.

    Muchas gracias fbforos.

    Por cierto, he probado el promediado de los datos y se descentra un poco menos pero aún así se suele descentrar muy a menudo, no?

    Saludos y buen trabajo
     
  37. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Pues si te digo la verdad yo solo lo he probado en casa, todavía no he podido ir al campo a ver cuanto se descentra :redface:.

    Seguro que este fin de semana largo, lo pruebo y os cuento
     
  38. jalves Miembro

    jalves
    Joined:
    Dec 30, 2007
    Messages:
    895
    Likes Received:
    0
    Hola a todos,

    Mi Wii-HT descentra a menudo cuando estoy no campo, la emisión potente do sistema UHF es tal vez lo culpado, já que en casa no lo hace. He feito testes estáticos de 30minutos sin una alteración da % dos canales.

    Por otro lado, las placas arduino mini-pro se estropean con alguna facilidad, como van las vuestras mini-pro?

    He regresado ao TRackR1 :redface:
     
  39. El_Nono Miembro Activo

    El_Nono
    Joined:
    Jun 22, 2007
    Messages:
    1,124
    Likes Received:
    0
    Hola Gente

    Lo del muestreo de datos es una recomendación que dan los propios fabricantes de los sensores, dicen que de esta forma se evitan posibles ruidos en los datos que si bien son muy pequeños y no afectan al movimiento del servo su acumulado hace que perjudique al centrado del mismo.
    Eso si, este es un solo filtro y muy elemental, ellos recomiendan un filtrado mucho mas complejo que no he implementado todavía.
    Todo esto es en búsqueda del centrado "perfecto" el cual todavía no hemos conseguido. :sad:

    Jalves: Si el arduino pro mini es tratado correctamente no tiene por que dañarse. De echo yo estoy usando el mismo desde el principio de este proyecto y mas también ya que ya lo venia usando para otras cosas.
    Lo que he notado es lo siguiente: Si se lo mantiene alimentado desde la emisora y a su vez se le conecta la interfaz FTDI para programarlo ahi si puede forzarse al regulador de tensión interno y puede llegar a quemarse o dañarse. Para programar el Arduino les recomiendo mantenerlo desconectado de la emisora.

    Saludos.

    El Nono
     
  40. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Problemas o interferencias

    Después de muchas pruebas hoy tengo la caja donde tengo montado el HT en la mano y se empieza a mover solo. cada vez que acercaba el dedo a la caja y siempre en la misma zona el sistema comenzaba a moverse.

    Desmonto la placa del giro y cada vez que acercaba el dedo, sin llegar a tocar los circuitos marcados con una flecha roja, creo que son amplificadores para la señal que genera el giro, se empezaban a mover los servos sin mover nada.

    Estaremos dando palos de ciego con el programa y tendremos un problema con interferencias
     

    Attached Files:

    • WIIM.gif
      WIIM.gif
      File size:
      162.4 KB
      Views:
      170
  41. IvanA3 Maestro FPV

    IvanA3
    Joined:
    Apr 23, 2008
    Messages:
    2,460
    Likes Received:
    1
    Podría ser...yo apantallé el arduino y seguía teniendo los problemas de interferencias...a ver si va ser que las interferencias se meten en el sensor!!

    Probaré a apantallar también en sensor a ver si noto mejoría...

    Saludos.
     
  42. jauria Nuevo Miembro

    jauria
    Joined:
    Apr 17, 2010
    Messages:
    1
    Likes Received:
    0
    Buenas,

    Llevo tiempo visitando vuestro foro y disfrutando de vuestros videos.

    Tengo un Arduino y me he puesto a probar esto del WM+. No se si os será de ayuda, pero la WM+ si entrega valores fast/slow para cada eje.

    Podeis comprobarlo con el siguiente codigo, eso si, he tenido que moverlo bastante rapido para que me variase los valores de lento a rapido.

    if(data[3] >> 1 & 1)
    Serial.println("Slow yaw.");
    else
    Serial.println("Fast yaw.");
    if(data[3] & 1)
    Serial.println("Slow pitch.");
    else
    Serial.println("Fast pitch.");
    if(data[4] >> 1 & 1)
    Serial.println("Slow roll.");
    else
    Serial.println("Fast roll.");

    Inicialmente probé con un codigo parecido al de abajo, con los mismos resultados que obtenias.

    Un saludo.


     
  43. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Creo que bastante rápido como indicas es mucho más de lo que la cabeza es capaz de moverse:laugh:.

    IVANA3, más que interferencia es ruido, me equivoque al clasificarlo. Esta tarde voy a probarlo de nuevo. Separé el circuito del WM+ de la caja aprox un cm. ahora cuando acerco el dedo por debajo de la caja ya no se mueve. Probaré a ponerlo encima de las gafas y ya os contaré
     
  44. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Pues he montado el WII HT con una Hitec optic 6 sport y los pulsos de salida de los dos canales del pan y tilt (al mirar por el osciloscopio) son invertidos respecto a los 6 canales, es decir si los pulsos son negativos (la parte estrecha para abajo ) los dos canales son positivos (la parte ancha para abajo.
    Cunado programo la emisora para que de pulsos positivos también invierte los 6 pulsos y los dos pulsos adicionales se quedan bien.

    No lo he probado con el receptor pero supongo que no funcionará

    Supongo que la solución es invertir la polaridad de los pulsos a la entrada, pero no se como modificar el programa.

    Salu2 y gracias por este estupendo diseño, espero poder solucionar este problema y poder usarlo pronto
     
  45. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Buenas.

    Aquí os muestro unas imágenes de como me presenta las señales de entrada y salida el HT con mi Hitec optic 6 sport.

    Al cambiar el shift tanto da que sea positivo como negativo da la misma señal y se come el pulso final.

    El Arduino esta programado con la ultima versión de Fbforos, la que se titula v1.0

    [​IMG]

    [​IMG]

    El problema es en la repetición de la señal de entada que la invierte y se come el pulso de inicio y final. Estoy mirando el código pero no veo por donde meterle mano.

    Saludos.
     

    Attached Files:

    #545 rupicola, Jun 16, 2010
    Last edited: Jun 16, 2010
  46. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Buenas.


    Nono he mirado tus últimos vídeos y supongo que usas este HT wii. Pues parece funcionar de fabula.

    Saludos.
     
    #546 rupicola, Jun 16, 2010
    Last edited: Jun 17, 2010
  47. fbforos Miembro

    fbforos
    Joined:
    Nov 1, 2008
    Messages:
    986
    Likes Received:
    0
    Rupicola

    La hitec que estas usando tiene la lógica invertida y por tanto no es que se como el pulso de inicio, sino que lo inícia en otra parte. El resultado es el mismo no funciona.

    Voy a tratar de solucionartelo pero no te prometo nada ( realmente no es mucho) a ver que se puede hacer
     
  48. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Buena fbforos, muchas gracias por ayudarme a solucionar este problema :worthy:

    He mirado la señal PPM de mi Htec y estas son las señales:

    Pulsos inicio de 0,43mS
    Duración pulso posición central 1,5ms
    Duración Total 20mS

    Yo pensaba que esta señal ppm era igual que la de Futaba.

    Parece que el disparo de inicio sea el flanco de bajada del primer pulso y el final en flanco de subida del último pulso, vamos lo que tu dice, lógica invertida.

    Me he mirado todo el código pero no encuentro donde se configura la señal de disparo de inicio y final de la trama NOTRAINER, supongo que la solución seria cambiar estos valores de HIGTH a LOW y al revés. Pero no se , pues he usado shift positivo y negativo y nada... :sad:

    Muchas gracias por todo y disculpa por robarte el tiempo.

    Salu2
     

    Attached Files:

  49. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Buenas.

    Después de un par de días de estudiar todas las referencias de la web de ardino y mirar el código de fbforos empiezo a entender como esta estructurado.

    Respecto al problema que yo tengo con la señal PPM de Hitec, creo que el arduino detecta los 7 pulsos pero da la señal invertida y como ya se encuentra en estado bajo no puede formar un pulso.

    Creo que la solucion la tengo en estaparte del codigo:
    [FONT=Courier New, monospace]

    El parámetro "estado = 1" ¿ se podría cambiar por 0?
    o en esta parte:
    [/FONT]
    Cambiando "estado= HIGH" por "estado= LOW"

    Puede que sea una chorrada lo que he dicho, pero es que no tengo ni idea de programar el arduino ni se como esta estructurado este programa. :confused:
    ¿Si me pudierais echar una mano los que domináis el tema ...? :worthy:

    También he pensado en hacer un inversor con un transistor a la entrada del circuito

    No se, a ver si me dais alguna pista.

    Saludos.
     
  50. rupicola Nuevo Miembro

    rupicola
    Joined:
    Dec 29, 2009
    Messages:
    64
    Likes Received:
    0
    Buenas.

    Como ya comento en mi anterior mensaje, la solución para que repita correctamente los pulsos de mi emisora Hitec Optic6 sport , y supongo que cualquier otra que tenga la lógica inversa respecto a futaba, es cambiar la linea de código que figura " estado= HIGH; " por " estado= LOW; "

    Aquí tenéis una captura del resultado

    Saludos Juan.
     

    Attached Files:

Share This Page