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.
main.cpp
- Committer:
- igorsk
- Date:
- 2009-12-02
- Revision:
- 0:a44429321af8
File content as of revision 0:a44429321af8:
#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);
}
}