Seguro, es un modelo de simulink por lo que es logica de bloques, pero es muy facil de entender
[img=http://s21.postimg.org/e3somkbr7/image.jpg][img=http://s21.postimg.org/i98n5lfur/image.jpg]si alguien tiene simulink dejo el archivo adjunto
bueno resumiendo, la primera imagen recibo los datos y junto los H con los L, segun ek datasheet, se reciben XH, XL, ZH, HL, YH, YL. con esto corro 8 posiciones y los junto (esto mismo hago con la mpu6050 y me funciona para obtener los datos del acelerometro y el giroscopio) luego multiplico por la escala a la que está configurada que enste caso es 4.35 la mas alta de 8 gaus (intenté con la todas las escalas y obtengo el mismo resultado, se pierden angulos)... despues se le suma el offset:
quizá lo este sacando mal
con la escala mas baja giro mi cuadricoptero en el eje Z y le doy varias vueltas (360 grados) teniendo cuidado de que esté bien horizontal el cuadricoptero, con una gui registro el valor mas pequeño y el mas grande en el eje X y Y
masomenos me dieron algo como Xmin=-400 xmax=100 Ymin=-400 ymax=100 (masomenos, no tengo ahora mismo el offset que hallé)
con eso asumo que a cada eje le debo sumar 150 a lo que mida despues del escalado para que quede xmin=-250 y xmax=250 y lo mismo con el Y, que seria un circulo centrado en el origen verdad????
despues pasan por la funciona atan2(B/A) que seria atan2(Y/X), le resto -0.105 que es la supuesta declinacion magnetica que depende de mi ubicacione geografica, busque mi coordenadas como me aconsejaron aca en este mismo post y da -0.105 radianes
luego pasa por el arreglo que vi en este mismo post
si el resultado es <0
heading=heading+2*pi
si el resultado es >2*pi
heading=heading-2*pi
si el resultado es >0
dejarlo pasar
Agradesco la ayuda