UM6 on AirBearing

Dependencies:   MODSERIAL mbed

Committer:
HMFK03LST1
Date:
Thu Apr 10 11:17:09 2014 +0000
Revision:
0:8a2c63ece2a9
UM6 on AirBearing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HMFK03LST1 0:8a2c63ece2a9 1 #include "mbed.h"
HMFK03LST1 0:8a2c63ece2a9 2 #include "math.h"
HMFK03LST1 0:8a2c63ece2a9 3 #include "MODSERIAL.h" // MBED BUFFERED SERIAL HEADER
HMFK03LST1 0:8a2c63ece2a9 4 #include "UM6_usart.h" // UM6 USART HEADER
HMFK03LST1 0:8a2c63ece2a9 5 #include "UM6_config.h" // UM6 CONFIG HEADER
HMFK03LST1 0:8a2c63ece2a9 6
HMFK03LST1 0:8a2c63ece2a9 7 #define PI 3.1415926
HMFK03LST1 0:8a2c63ece2a9 8 #define acc_acu 8
HMFK03LST1 0:8a2c63ece2a9 9 #define mag_acu 8
HMFK03LST1 0:8a2c63ece2a9 10
HMFK03LST1 0:8a2c63ece2a9 11
HMFK03LST1 0:8a2c63ece2a9 12
HMFK03LST1 0:8a2c63ece2a9 13 //Serial ios(p28, p27); // Serielle Verbi. mit XBee über Pin: tx-28, rx-27
HMFK03LST1 0:8a2c63ece2a9 14 Serial ios(USBTX, USBRX); // Serielle Verbi. über USB Port vom PC
HMFK03LST1 0:8a2c63ece2a9 15
HMFK03LST1 0:8a2c63ece2a9 16 DigitalOut rst(p11); // Digital Reset für the XBee, 200ns für reset
HMFK03LST1 0:8a2c63ece2a9 17 PwmOut x_kreisel(p21); // Pin21-PwmOut ist für Drehung um X-Achse
HMFK03LST1 0:8a2c63ece2a9 18 PwmOut y_kreisel(p23); // Pin23-PwmOut ist für Drehung um Y-Achse
HMFK03LST1 0:8a2c63ece2a9 19 PwmOut z_kreisel(p22); // Pin22-PwmOut ist für Drehung um Z-Achse
HMFK03LST1 0:8a2c63ece2a9 20
HMFK03LST1 0:8a2c63ece2a9 21 DigitalOut uart_activity(LED1); // LED1 = UM6 SERIAL für Kommunikation
HMFK03LST1 0:8a2c63ece2a9 22
HMFK03LST1 0:8a2c63ece2a9 23 //acc struct
HMFK03LST1 0:8a2c63ece2a9 24 struct {
HMFK03LST1 0:8a2c63ece2a9 25 float x;
HMFK03LST1 0:8a2c63ece2a9 26 float y;
HMFK03LST1 0:8a2c63ece2a9 27 float z;
HMFK03LST1 0:8a2c63ece2a9 28 }raw_acc;
HMFK03LST1 0:8a2c63ece2a9 29
HMFK03LST1 0:8a2c63ece2a9 30 struct {
HMFK03LST1 0:8a2c63ece2a9 31 float g;
HMFK03LST1 0:8a2c63ece2a9 32 float xy;
HMFK03LST1 0:8a2c63ece2a9 33 float zx;
HMFK03LST1 0:8a2c63ece2a9 34 float zy;
HMFK03LST1 0:8a2c63ece2a9 35 float x;
HMFK03LST1 0:8a2c63ece2a9 36 float y;
HMFK03LST1 0:8a2c63ece2a9 37 float z;
HMFK03LST1 0:8a2c63ece2a9 38 }norm_acc;
HMFK03LST1 0:8a2c63ece2a9 39
HMFK03LST1 0:8a2c63ece2a9 40 struct {
HMFK03LST1 0:8a2c63ece2a9 41 float x;
HMFK03LST1 0:8a2c63ece2a9 42 float y;
HMFK03LST1 0:8a2c63ece2a9 43 float z;
HMFK03LST1 0:8a2c63ece2a9 44 }euler_acc_raw;
HMFK03LST1 0:8a2c63ece2a9 45
HMFK03LST1 0:8a2c63ece2a9 46 struct {
HMFK03LST1 0:8a2c63ece2a9 47 double x;
HMFK03LST1 0:8a2c63ece2a9 48 double y;
HMFK03LST1 0:8a2c63ece2a9 49 double z;
HMFK03LST1 0:8a2c63ece2a9 50 char x_acu;
HMFK03LST1 0:8a2c63ece2a9 51 char z_acu;
HMFK03LST1 0:8a2c63ece2a9 52 char y_acu;
HMFK03LST1 0:8a2c63ece2a9 53 }euler_acc;
HMFK03LST1 0:8a2c63ece2a9 54
HMFK03LST1 0:8a2c63ece2a9 55 struct {
HMFK03LST1 0:8a2c63ece2a9 56 double x;
HMFK03LST1 0:8a2c63ece2a9 57 double y;
HMFK03LST1 0:8a2c63ece2a9 58 double z;
HMFK03LST1 0:8a2c63ece2a9 59
HMFK03LST1 0:8a2c63ece2a9 60 }euler_m;
HMFK03LST1 0:8a2c63ece2a9 61
HMFK03LST1 0:8a2c63ece2a9 62
HMFK03LST1 0:8a2c63ece2a9 63 //mag struct
HMFK03LST1 0:8a2c63ece2a9 64 struct {
HMFK03LST1 0:8a2c63ece2a9 65 float x;
HMFK03LST1 0:8a2c63ece2a9 66 float y;
HMFK03LST1 0:8a2c63ece2a9 67 float z;
HMFK03LST1 0:8a2c63ece2a9 68 }raw_mag;
HMFK03LST1 0:8a2c63ece2a9 69
HMFK03LST1 0:8a2c63ece2a9 70 struct {
HMFK03LST1 0:8a2c63ece2a9 71 float g;
HMFK03LST1 0:8a2c63ece2a9 72 float xy;
HMFK03LST1 0:8a2c63ece2a9 73 float zx;
HMFK03LST1 0:8a2c63ece2a9 74 float zy;
HMFK03LST1 0:8a2c63ece2a9 75 float x;
HMFK03LST1 0:8a2c63ece2a9 76 float y;
HMFK03LST1 0:8a2c63ece2a9 77 float z;
HMFK03LST1 0:8a2c63ece2a9 78 }norm_mag;
HMFK03LST1 0:8a2c63ece2a9 79
HMFK03LST1 0:8a2c63ece2a9 80 struct {
HMFK03LST1 0:8a2c63ece2a9 81 float x;
HMFK03LST1 0:8a2c63ece2a9 82 float y;
HMFK03LST1 0:8a2c63ece2a9 83 float z;
HMFK03LST1 0:8a2c63ece2a9 84 }euler_mag_raw;
HMFK03LST1 0:8a2c63ece2a9 85
HMFK03LST1 0:8a2c63ece2a9 86 struct {
HMFK03LST1 0:8a2c63ece2a9 87 float x;
HMFK03LST1 0:8a2c63ece2a9 88 char x_acu;
HMFK03LST1 0:8a2c63ece2a9 89 float y;
HMFK03LST1 0:8a2c63ece2a9 90 char y_acu;
HMFK03LST1 0:8a2c63ece2a9 91 float z;
HMFK03LST1 0:8a2c63ece2a9 92 char z_acu;
HMFK03LST1 0:8a2c63ece2a9 93 float bias_x;
HMFK03LST1 0:8a2c63ece2a9 94 float bias_y;
HMFK03LST1 0:8a2c63ece2a9 95 float bias_z;
HMFK03LST1 0:8a2c63ece2a9 96 }euler_mag;
HMFK03LST1 0:8a2c63ece2a9 97
HMFK03LST1 0:8a2c63ece2a9 98 bool recive;
HMFK03LST1 0:8a2c63ece2a9 99
HMFK03LST1 0:8a2c63ece2a9 100
HMFK03LST1 0:8a2c63ece2a9 101 ///////////////////////////////////////////////////////////////////////////////////////////////////
HMFK03LST1 0:8a2c63ece2a9 102 // rxCallback // FUNKTION FÜR INTERRUPT
HMFK03LST1 0:8a2c63ece2a9 103
HMFK03LST1 0:8a2c63ece2a9 104 void rxCallback(MODSERIAL_IRQ_INFO *q)
HMFK03LST1 0:8a2c63ece2a9 105 {
HMFK03LST1 0:8a2c63ece2a9 106 if (um6_uart.rxBufferGetCount() >= MAX_PACKET_DATA)
HMFK03LST1 0:8a2c63ece2a9 107 {
HMFK03LST1 0:8a2c63ece2a9 108 uart_activity = !uart_activity; // LED leuchtet wenn RxBuff hat > 40 Bytes
HMFK03LST1 0:8a2c63ece2a9 109 Process_um6_packet();
HMFK03LST1 0:8a2c63ece2a9 110 }
HMFK03LST1 0:8a2c63ece2a9 111 }
HMFK03LST1 0:8a2c63ece2a9 112
HMFK03LST1 0:8a2c63ece2a9 113
HMFK03LST1 0:8a2c63ece2a9 114 float deg_diff(float start_angle, float end_angle)
HMFK03LST1 0:8a2c63ece2a9 115 {
HMFK03LST1 0:8a2c63ece2a9 116 float left;
HMFK03LST1 0:8a2c63ece2a9 117
HMFK03LST1 0:8a2c63ece2a9 118 left = end_angle - start_angle;
HMFK03LST1 0:8a2c63ece2a9 119
HMFK03LST1 0:8a2c63ece2a9 120 if (left > 180) {left = ((end_angle - 360)-start_angle);}
HMFK03LST1 0:8a2c63ece2a9 121 if (left < -180) {left = ((end_angle + 360)-start_angle);}
HMFK03LST1 0:8a2c63ece2a9 122 return left;
HMFK03LST1 0:8a2c63ece2a9 123 }
HMFK03LST1 0:8a2c63ece2a9 124
HMFK03LST1 0:8a2c63ece2a9 125 float rad_to_deg(float rad)
HMFK03LST1 0:8a2c63ece2a9 126 { return((rad) * (180.0 / PI));}
HMFK03LST1 0:8a2c63ece2a9 127
HMFK03LST1 0:8a2c63ece2a9 128 // Acc Sensor
HMFK03LST1 0:8a2c63ece2a9 129
HMFK03LST1 0:8a2c63ece2a9 130 int sgn(double x)
HMFK03LST1 0:8a2c63ece2a9 131 {
HMFK03LST1 0:8a2c63ece2a9 132 if (x > 0.0L)
HMFK03LST1 0:8a2c63ece2a9 133 return 1.0L;
HMFK03LST1 0:8a2c63ece2a9 134 else if (x < 0.0L)
HMFK03LST1 0:8a2c63ece2a9 135 return -1.0L;
HMFK03LST1 0:8a2c63ece2a9 136 else
HMFK03LST1 0:8a2c63ece2a9 137 return 0.0L;
HMFK03LST1 0:8a2c63ece2a9 138 }
HMFK03LST1 0:8a2c63ece2a9 139
HMFK03LST1 0:8a2c63ece2a9 140 void make_acc_norm()
HMFK03LST1 0:8a2c63ece2a9 141 {
HMFK03LST1 0:8a2c63ece2a9 142 norm_acc.g = sqrt((data.Accel_Proc_X * data.Accel_Proc_X) + (data.Accel_Proc_Y * data.Accel_Proc_Y) + (data.Accel_Proc_Z * data.Accel_Proc_Z));
HMFK03LST1 0:8a2c63ece2a9 143 norm_acc.xy = sqrt((data.Accel_Proc_X * data.Accel_Proc_X) + (data.Accel_Proc_Y * data.Accel_Proc_Y));
HMFK03LST1 0:8a2c63ece2a9 144 norm_acc.zx = sqrt((data.Accel_Proc_Z * data.Accel_Proc_Z) + (data.Accel_Proc_X * data.Accel_Proc_X));
HMFK03LST1 0:8a2c63ece2a9 145 norm_acc.zy = sqrt((data.Accel_Proc_Z * data.Accel_Proc_Z) + (data.Accel_Proc_Y * data.Accel_Proc_Y));
HMFK03LST1 0:8a2c63ece2a9 146
HMFK03LST1 0:8a2c63ece2a9 147 norm_acc.x = data.Accel_Proc_X / norm_acc.g;
HMFK03LST1 0:8a2c63ece2a9 148 norm_acc.y = data.Accel_Proc_Y / norm_acc.g;
HMFK03LST1 0:8a2c63ece2a9 149 norm_acc.z = data.Accel_Proc_Z / norm_acc.g;
HMFK03LST1 0:8a2c63ece2a9 150 }
HMFK03LST1 0:8a2c63ece2a9 151
HMFK03LST1 0:8a2c63ece2a9 152 char nicken_y_acc_raw()
HMFK03LST1 0:8a2c63ece2a9 153 {
HMFK03LST1 0:8a2c63ece2a9 154 if(norm_acc.z != 0)
HMFK03LST1 0:8a2c63ece2a9 155 {euler_acc_raw.y = atan(norm_acc.x / norm_acc.z);}
HMFK03LST1 0:8a2c63ece2a9 156 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 157
HMFK03LST1 0:8a2c63ece2a9 158 return (acc_acu * norm_acc.zx/norm_acc.g);
HMFK03LST1 0:8a2c63ece2a9 159 }
HMFK03LST1 0:8a2c63ece2a9 160
HMFK03LST1 0:8a2c63ece2a9 161 char rollen_x_acc_raw()
HMFK03LST1 0:8a2c63ece2a9 162 {
HMFK03LST1 0:8a2c63ece2a9 163 if(norm_acc.z != 0)
HMFK03LST1 0:8a2c63ece2a9 164 {euler_acc_raw.x = atan(norm_acc.y / norm_acc.z);}
HMFK03LST1 0:8a2c63ece2a9 165 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 166
HMFK03LST1 0:8a2c63ece2a9 167 return (acc_acu * norm_acc.zy/norm_acc.g);
HMFK03LST1 0:8a2c63ece2a9 168 }
HMFK03LST1 0:8a2c63ece2a9 169
HMFK03LST1 0:8a2c63ece2a9 170 char drehen_z_acc_raw()
HMFK03LST1 0:8a2c63ece2a9 171 {
HMFK03LST1 0:8a2c63ece2a9 172 if((norm_acc.y != 0)&&(norm_acc.xy != 0))
HMFK03LST1 0:8a2c63ece2a9 173 {euler_acc_raw.z = asin(norm_acc.y / norm_acc.xy);
HMFK03LST1 0:8a2c63ece2a9 174 if (sgn(norm_acc.x) < 0) { if (euler_acc_raw.z > 0) {euler_acc_raw.z = PI - euler_acc_raw.z ;} else {euler_acc_raw.z = -PI - euler_acc_raw.z ;} }
HMFK03LST1 0:8a2c63ece2a9 175 }
HMFK03LST1 0:8a2c63ece2a9 176 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 177
HMFK03LST1 0:8a2c63ece2a9 178 if (euler_acc_raw.z < 0) {euler_acc_raw.z = 2 * PI + euler_acc_raw.z;}
HMFK03LST1 0:8a2c63ece2a9 179
HMFK03LST1 0:8a2c63ece2a9 180 return (acc_acu * norm_acc.xy/norm_acc.g);
HMFK03LST1 0:8a2c63ece2a9 181 }
HMFK03LST1 0:8a2c63ece2a9 182
HMFK03LST1 0:8a2c63ece2a9 183 void position_acc ()
HMFK03LST1 0:8a2c63ece2a9 184 {
HMFK03LST1 0:8a2c63ece2a9 185
HMFK03LST1 0:8a2c63ece2a9 186 make_acc_norm();
HMFK03LST1 0:8a2c63ece2a9 187
HMFK03LST1 0:8a2c63ece2a9 188 euler_acc.x_acu = rollen_x_acc_raw();
HMFK03LST1 0:8a2c63ece2a9 189 euler_acc.y_acu = nicken_y_acc_raw();
HMFK03LST1 0:8a2c63ece2a9 190 euler_acc.z_acu = drehen_z_acc_raw();
HMFK03LST1 0:8a2c63ece2a9 191
HMFK03LST1 0:8a2c63ece2a9 192 euler_acc.x = rad_to_deg(euler_acc_raw.x);
HMFK03LST1 0:8a2c63ece2a9 193 euler_acc.y = rad_to_deg(euler_acc_raw.y);
HMFK03LST1 0:8a2c63ece2a9 194 euler_acc.z = rad_to_deg(euler_acc_raw.z);
HMFK03LST1 0:8a2c63ece2a9 195 }
HMFK03LST1 0:8a2c63ece2a9 196
HMFK03LST1 0:8a2c63ece2a9 197
HMFK03LST1 0:8a2c63ece2a9 198
HMFK03LST1 0:8a2c63ece2a9 199 // Magnetometer
HMFK03LST1 0:8a2c63ece2a9 200
HMFK03LST1 0:8a2c63ece2a9 201 void make_mag_norm()
HMFK03LST1 0:8a2c63ece2a9 202 {
HMFK03LST1 0:8a2c63ece2a9 203 norm_mag.g = sqrt((data.Mag_Proc_X * data.Mag_Proc_X) + (data.Mag_Proc_Y * data.Mag_Proc_Y) + (data.Mag_Proc_Z * data.Mag_Proc_Z));
HMFK03LST1 0:8a2c63ece2a9 204 norm_mag.xy = sqrt((data.Mag_Proc_X * data.Mag_Proc_X) + (data.Mag_Proc_Y * data.Mag_Proc_Y));
HMFK03LST1 0:8a2c63ece2a9 205 norm_mag.zx = sqrt((data.Mag_Proc_Z * data.Mag_Proc_Z) + (data.Mag_Proc_X * data.Mag_Proc_X));
HMFK03LST1 0:8a2c63ece2a9 206 norm_mag.zy = sqrt((data.Mag_Proc_Z * data.Mag_Proc_Z) + (data.Mag_Proc_Y * data.Mag_Proc_Y));
HMFK03LST1 0:8a2c63ece2a9 207
HMFK03LST1 0:8a2c63ece2a9 208 norm_mag.x = data.Mag_Proc_X / norm_mag.g;
HMFK03LST1 0:8a2c63ece2a9 209 norm_mag.y = data.Mag_Proc_Y / norm_mag.g;
HMFK03LST1 0:8a2c63ece2a9 210 norm_mag.z = data.Mag_Proc_Z / norm_mag.g;
HMFK03LST1 0:8a2c63ece2a9 211 }
HMFK03LST1 0:8a2c63ece2a9 212
HMFK03LST1 0:8a2c63ece2a9 213 char nicken_y_mag_raw()
HMFK03LST1 0:8a2c63ece2a9 214 {
HMFK03LST1 0:8a2c63ece2a9 215 if(norm_mag.z != 0)
HMFK03LST1 0:8a2c63ece2a9 216 {euler_mag_raw.y = atan(norm_mag.x / norm_mag.z);}
HMFK03LST1 0:8a2c63ece2a9 217 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 218
HMFK03LST1 0:8a2c63ece2a9 219 return (acc_acu * norm_mag.zx/norm_mag.g);
HMFK03LST1 0:8a2c63ece2a9 220 }
HMFK03LST1 0:8a2c63ece2a9 221
HMFK03LST1 0:8a2c63ece2a9 222 char rollen_x_mag_raw()
HMFK03LST1 0:8a2c63ece2a9 223 {
HMFK03LST1 0:8a2c63ece2a9 224 if(norm_mag.z != 0)
HMFK03LST1 0:8a2c63ece2a9 225 {euler_mag_raw.x = atan(norm_mag.y / norm_mag.z);}
HMFK03LST1 0:8a2c63ece2a9 226 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 227
HMFK03LST1 0:8a2c63ece2a9 228 return (acc_acu *norm_mag.zy/norm_mag.g);
HMFK03LST1 0:8a2c63ece2a9 229 }
HMFK03LST1 0:8a2c63ece2a9 230
HMFK03LST1 0:8a2c63ece2a9 231 char drehen_z_mag_raw()
HMFK03LST1 0:8a2c63ece2a9 232 {
HMFK03LST1 0:8a2c63ece2a9 233 if((norm_mag.y != 0)&&(norm_mag.xy != 0))
HMFK03LST1 0:8a2c63ece2a9 234 {euler_mag_raw.z = asin(norm_mag.x / norm_mag.xy) * (norm_mag.y / abs(norm_mag.y));}
HMFK03LST1 0:8a2c63ece2a9 235 else {return (0);}
HMFK03LST1 0:8a2c63ece2a9 236
HMFK03LST1 0:8a2c63ece2a9 237 if (euler_mag_raw.z < 0) {euler_mag_raw.z = 6.28 + euler_mag_raw.z;}
HMFK03LST1 0:8a2c63ece2a9 238
HMFK03LST1 0:8a2c63ece2a9 239 return (acc_acu *norm_mag.xy/norm_mag.g);
HMFK03LST1 0:8a2c63ece2a9 240 }
HMFK03LST1 0:8a2c63ece2a9 241
HMFK03LST1 0:8a2c63ece2a9 242 void position_mag ()
HMFK03LST1 0:8a2c63ece2a9 243 {
HMFK03LST1 0:8a2c63ece2a9 244
HMFK03LST1 0:8a2c63ece2a9 245 make_mag_norm();
HMFK03LST1 0:8a2c63ece2a9 246
HMFK03LST1 0:8a2c63ece2a9 247 euler_mag.x_acu = rollen_x_mag_raw();
HMFK03LST1 0:8a2c63ece2a9 248 euler_mag.y_acu = nicken_y_mag_raw();
HMFK03LST1 0:8a2c63ece2a9 249 euler_mag.z_acu = drehen_z_mag_raw();
HMFK03LST1 0:8a2c63ece2a9 250
HMFK03LST1 0:8a2c63ece2a9 251 euler_mag.x = euler_mag_raw.x - euler_mag.bias_x;
HMFK03LST1 0:8a2c63ece2a9 252 euler_mag.y = euler_mag_raw.y - euler_mag.bias_y;
HMFK03LST1 0:8a2c63ece2a9 253 euler_mag.z = euler_mag_raw.z;
HMFK03LST1 0:8a2c63ece2a9 254 }
HMFK03LST1 0:8a2c63ece2a9 255
HMFK03LST1 0:8a2c63ece2a9 256 void print_data()
HMFK03LST1 0:8a2c63ece2a9 257 {
HMFK03LST1 0:8a2c63ece2a9 258 ios.printf("\n\r Data: Acc Mag");
HMFK03LST1 0:8a2c63ece2a9 259 ios.printf("\n\r x: %5.1f %d x: %5.1f %d",euler_m.x,euler_acc.x_acu, rad_to_deg(euler_mag.x),euler_mag.x_acu);
HMFK03LST1 0:8a2c63ece2a9 260 ios.printf("\n\r y: %5.1f %d y: %5.1f %d",euler_m.y,euler_acc.y_acu, rad_to_deg(euler_mag.y),euler_mag.y_acu);
HMFK03LST1 0:8a2c63ece2a9 261 ios.printf("\n\r z: %5.1f %d z: %5.1f %d",euler_m.z,euler_acc.z_acu, rad_to_deg(euler_mag.z),euler_mag.z_acu);
HMFK03LST1 0:8a2c63ece2a9 262 ios.printf("\n\r");
HMFK03LST1 0:8a2c63ece2a9 263 }
HMFK03LST1 0:8a2c63ece2a9 264
HMFK03LST1 0:8a2c63ece2a9 265
HMFK03LST1 0:8a2c63ece2a9 266 int main() {
HMFK03LST1 0:8a2c63ece2a9 267 unsigned int count = 0;
HMFK03LST1 0:8a2c63ece2a9 268
HMFK03LST1 0:8a2c63ece2a9 269 ios.baud(115200); // Baudrate XBee Funkmodul
HMFK03LST1 0:8a2c63ece2a9 270 um6_uart.baud(115200); // Baudrate UM6-lt
HMFK03LST1 0:8a2c63ece2a9 271 um6_uart.attach(&rxCallback, MODSERIAL::RxIrq); // Interrupt Funktion für UART
HMFK03LST1 0:8a2c63ece2a9 272
HMFK03LST1 0:8a2c63ece2a9 273 euler_m.x = 0.0;
HMFK03LST1 0:8a2c63ece2a9 274 euler_m.y = 0.0;
HMFK03LST1 0:8a2c63ece2a9 275 euler_m.z = 0.0;
HMFK03LST1 0:8a2c63ece2a9 276 euler_acc.x = 0.0;
HMFK03LST1 0:8a2c63ece2a9 277 euler_acc.y = 0.0;
HMFK03LST1 0:8a2c63ece2a9 278 euler_acc.z = 0.0;
HMFK03LST1 0:8a2c63ece2a9 279
HMFK03LST1 0:8a2c63ece2a9 280
HMFK03LST1 0:8a2c63ece2a9 281 while(1) {
HMFK03LST1 0:8a2c63ece2a9 282 if (recive) {
HMFK03LST1 0:8a2c63ece2a9 283 recive = 0;
HMFK03LST1 0:8a2c63ece2a9 284 count++;
HMFK03LST1 0:8a2c63ece2a9 285
HMFK03LST1 0:8a2c63ece2a9 286 if ((count%2) == 1)
HMFK03LST1 0:8a2c63ece2a9 287 {
HMFK03LST1 0:8a2c63ece2a9 288 position_acc();
HMFK03LST1 0:8a2c63ece2a9 289 position_mag();
HMFK03LST1 0:8a2c63ece2a9 290
HMFK03LST1 0:8a2c63ece2a9 291 euler_m.x = euler_m.x + ((euler_acc.x - euler_m.x)/24);
HMFK03LST1 0:8a2c63ece2a9 292 euler_m.y = euler_m.y + ((euler_acc.y - euler_m.y)/24);
HMFK03LST1 0:8a2c63ece2a9 293 euler_m.z = euler_m.z + ((euler_acc.z - euler_m.z)/24);
HMFK03LST1 0:8a2c63ece2a9 294 }
HMFK03LST1 0:8a2c63ece2a9 295
HMFK03LST1 0:8a2c63ece2a9 296 if ((count%20) == 1)
HMFK03LST1 0:8a2c63ece2a9 297 {
HMFK03LST1 0:8a2c63ece2a9 298 //euler_m.x = euler_m.x/3;
HMFK03LST1 0:8a2c63ece2a9 299 print_data();
HMFK03LST1 0:8a2c63ece2a9 300 }
HMFK03LST1 0:8a2c63ece2a9 301
HMFK03LST1 0:8a2c63ece2a9 302 }
HMFK03LST1 0:8a2c63ece2a9 303 }
HMFK03LST1 0:8a2c63ece2a9 304 }