Interface library for STMicro LSM303DLH 3-axis magnetometer w/ 3-axis acceleromter. Computes magnetic heading.

Fork of LSM303DLH by Michael Shimniok

Committer:
paulcox
Date:
Wed Oct 15 15:01:31 2014 +0000
Revision:
3:9c3f240d14bf
Parent:
0:de767f4959ef
Program tested with all Nucleo boards updated to 2j23m6 firmware and confirmed as working (led blinks and magnetometer info received via I2C)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:de767f4959ef 1 #include <vector.h>
shimniok 0:de767f4959ef 2 #include <math.h>
shimniok 0:de767f4959ef 3
shimniok 0:de767f4959ef 4 void vector_cross(const vector *a,const vector *b, vector *out)
shimniok 0:de767f4959ef 5 {
shimniok 0:de767f4959ef 6 out->x = a->y*b->z - a->z*b->y;
shimniok 0:de767f4959ef 7 out->y = a->z*b->x - a->x*b->z;
shimniok 0:de767f4959ef 8 out->z = a->x*b->y - a->y*b->x;
shimniok 0:de767f4959ef 9 }
shimniok 0:de767f4959ef 10
shimniok 0:de767f4959ef 11 float vector_dot(const vector *a,const vector *b)
shimniok 0:de767f4959ef 12 {
shimniok 0:de767f4959ef 13 return a->x*b->x+a->y*b->y+a->z*b->z;
shimniok 0:de767f4959ef 14 }
shimniok 0:de767f4959ef 15
shimniok 0:de767f4959ef 16 void vector_normalize(vector *a)
shimniok 0:de767f4959ef 17 {
shimniok 0:de767f4959ef 18 float mag = sqrt(vector_dot(a,a));
shimniok 0:de767f4959ef 19 a->x /= mag;
shimniok 0:de767f4959ef 20 a->y /= mag;
shimniok 0:de767f4959ef 21 a->z /= mag;
shimniok 0:de767f4959ef 22 }