For Hepta-Sat Lite

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 I2C i2c(PB_7, PB_6);
00003 Serial pc(USBTX, USBRX, 9600);
00004 const int addr_accel_gyro = 0xD0;
00005 const int addr_compus = 0x18;
00006 
00007 
00008 char cmd[2];
00009 char data[1];
00010 char adata[1];
00011 char mxl[1], mxh[1], myl[1], myh[1], mzl[1], mzh[1] , st[1];
00012 double mg_x, mg_y, mg_z, MX, MY, MZ;
00013 
00014 int main() {
00015     pc.printf("Start detectiong magnetism\r\n");
00016     wait(1.0);
00017     i2c.frequency(100000);
00018     
00019     cmd[0]=0x6B;
00020     cmd[1]=0x00;
00021     i2c.write(addr_accel_gyro,cmd,2);
00022     cmd[0] = 0x37;
00023     cmd[1] = 0x02;
00024     i2c.write(addr_accel_gyro,cmd,2);
00025     
00026     //write address of compus
00027     adata[0] = 0x0A;
00028     adata[1] = 0x12;
00029     i2c.write(addr_compus,adata,2);
00030     i2c.stop();
00031     wait(1);
00032     
00033     while(1) {
00034         
00035         //=========== x ===========
00036         //read mxl
00037         adata[0] = 0x03;
00038         i2c.write(addr_compus,adata,1);
00039         i2c.read(addr_compus|0x01,mxl,1);
00040 
00041         //read mxh
00042         adata[0] = 0x04;
00043         i2c.write(addr_compus,adata,1);
00044         i2c.read(addr_compus|0x01,mxh,1);
00045         
00046         
00047         //=========== y ===========
00048         adata[0] = 0x05;
00049         i2c.write(addr_compus,adata,1);
00050         i2c.read(addr_compus|0x01,myl,1);
00051         
00052         adata[0] = 0x06;
00053         i2c.write(addr_compus,adata,1);
00054         i2c.read(addr_compus|0x01,myh,1);
00055         
00056         
00057         //=========== z ===========
00058         adata[0] = 0x07;
00059         i2c.write(addr_compus,adata,1);
00060         i2c.read(addr_compus|0x01,mzl,1);
00061         
00062         adata[0] = 0x08;
00063         i2c.write(addr_compus,adata,1);
00064         i2c.read(addr_compus|0x01,mzh,1);
00065         
00066         //status 
00067         adata[0] = 0x09;
00068         i2c.write(addr_compus,adata,1);
00069         i2c.read(addr_compus|0x01,st,1);
00070         
00071         
00072         
00073         mg_x = short((mxh[0]<<8)|(mxl[0]));
00074         mg_y = short((myh[0]<<8)|(myl[0]));
00075         mg_z = short((mzh[0]<<8)|(mzl[0]));
00076         MX = mg_x*0.15;
00077         MY = mg_y*0.15;
00078         MZ = mg_z*0.15;
00079         pc.printf("MX= %f,MY= %f,MZ= %f\r\n",MX,MY,MZ);
00080 
00081         wait(0.5);
00082         
00083     }
00084     
00085 }