A class and a demo program to use with the DC-SS504 board from SureElectronics which uses MMC2120MG magnetometer from Memsic. The program glows leds depending on the direction it is turned to.

Dependencies:   mbed

Committer:
igorsk
Date:
Wed Dec 02 23:03:25 2009 +0000
Revision:
0:a44429321af8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igorsk 0:a44429321af8 1 #include "mbed.h"
igorsk 0:a44429321af8 2 #include "MMCx12xM.h"
igorsk 0:a44429321af8 3
igorsk 0:a44429321af8 4 I2C i2c(p9, p10); // sda, scl
igorsk 0:a44429321af8 5 DigitalOut memsic_power(p8);
igorsk 0:a44429321af8 6
igorsk 0:a44429321af8 7 MMCx12xM memsic(i2c);
igorsk 0:a44429321af8 8
igorsk 0:a44429321af8 9 PwmOut led1(LED1);
igorsk 0:a44429321af8 10 PwmOut led2(LED2);
igorsk 0:a44429321af8 11 PwmOut led3(LED3);
igorsk 0:a44429321af8 12 PwmOut led4(LED4);
igorsk 0:a44429321af8 13
igorsk 0:a44429321af8 14 int main()
igorsk 0:a44429321af8 15 {
igorsk 0:a44429321af8 16 printf("MMC2120M demo\n");
igorsk 0:a44429321af8 17 memsic_power = 1;
igorsk 0:a44429321af8 18 bool ok = memsic.coil_set();
igorsk 0:a44429321af8 19 printf("Set: %d\n", ok);
igorsk 0:a44429321af8 20
igorsk 0:a44429321af8 21 /*int values[2];
igorsk 0:a44429321af8 22 for (;;)
igorsk 0:a44429321af8 23 {
igorsk 0:a44429321af8 24 ok = memsic.read_raw_values(values);
igorsk 0:a44429321af8 25 printf("ok: %d, x: %d, y: %d\n", ok, values[0], values[1]);
igorsk 0:a44429321af8 26 wait(2);
igorsk 0:a44429321af8 27 }*/
igorsk 0:a44429321af8 28
igorsk 0:a44429321af8 29 printf("Starting calibration. Turn the sensor in all possible directions for 10 seconds.\n");
igorsk 0:a44429321af8 30 memsic.calibrate_begin();
igorsk 0:a44429321af8 31 int cal_count = 0;
igorsk 0:a44429321af8 32 while (1)
igorsk 0:a44429321af8 33 {
igorsk 0:a44429321af8 34 memsic.calibrate_step();
igorsk 0:a44429321af8 35 cal_count++;
igorsk 0:a44429321af8 36 wait_ms(100);
igorsk 0:a44429321af8 37 if ( cal_count > 100 )
igorsk 0:a44429321af8 38 break;
igorsk 0:a44429321af8 39 }
igorsk 0:a44429321af8 40 memsic.calibrate_end();
igorsk 0:a44429321af8 41 //printf("%d samples were used for calibration\n", cal_count);
igorsk 0:a44429321af8 42 float fvalues[2];
igorsk 0:a44429321af8 43 for (;;)
igorsk 0:a44429321af8 44 {
igorsk 0:a44429321af8 45 ok = memsic.read_values(fvalues);
igorsk 0:a44429321af8 46 printf("ok: %d, x: %f, y: %f\n", ok, fvalues[0], fvalues[1]);
igorsk 0:a44429321af8 47 led1 = fvalues[0] > 0 ? fvalues[0] : 0;
igorsk 0:a44429321af8 48 led2 = fvalues[1] > 0 ? fvalues[1] : 0;
igorsk 0:a44429321af8 49 led3 = fvalues[0] < 0 ? -fvalues[0] : 0;
igorsk 0:a44429321af8 50 led4 = fvalues[1] < 0 ? -fvalues[1] : 0;
igorsk 0:a44429321af8 51 wait_ms(100);
igorsk 0:a44429321af8 52 }
igorsk 0:a44429321af8 53 }