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@0:a44429321af8, 2009-12-02 (annotated)
- Committer:
- igorsk
- Date:
- Wed Dec 02 23:03:25 2009 +0000
- Revision:
- 0:a44429321af8
Who changed what in which revision?
User | Revision | Line number | New 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 | } |