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.
Diff: main.cpp
- Revision:
- 0:a44429321af8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 02 23:03:25 2009 +0000 @@ -0,0 +1,53 @@ +#include "mbed.h" +#include "MMCx12xM.h" + +I2C i2c(p9, p10); // sda, scl +DigitalOut memsic_power(p8); + +MMCx12xM memsic(i2c); + +PwmOut led1(LED1); +PwmOut led2(LED2); +PwmOut led3(LED3); +PwmOut led4(LED4); + +int main() +{ + printf("MMC2120M demo\n"); + memsic_power = 1; + bool ok = memsic.coil_set(); + printf("Set: %d\n", ok); + + /*int values[2]; + for (;;) + { + ok = memsic.read_raw_values(values); + printf("ok: %d, x: %d, y: %d\n", ok, values[0], values[1]); + wait(2); + }*/ + + printf("Starting calibration. Turn the sensor in all possible directions for 10 seconds.\n"); + memsic.calibrate_begin(); + int cal_count = 0; + while (1) + { + memsic.calibrate_step(); + cal_count++; + wait_ms(100); + if ( cal_count > 100 ) + break; + } + memsic.calibrate_end(); + //printf("%d samples were used for calibration\n", cal_count); + float fvalues[2]; + for (;;) + { + ok = memsic.read_values(fvalues); + printf("ok: %d, x: %f, y: %f\n", ok, fvalues[0], fvalues[1]); + led1 = fvalues[0] > 0 ? fvalues[0] : 0; + led2 = fvalues[1] > 0 ? fvalues[1] : 0; + led3 = fvalues[0] < 0 ? -fvalues[0] : 0; + led4 = fvalues[1] < 0 ? -fvalues[1] : 0; + wait_ms(100); + } +} \ No newline at end of file