HeptaSat

Dependencies:   HEPTA_EPS mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "HEPTA_EPS.h"
00003 #define MAG 0x13<<1 //addr_compus
00004 
00005 RawSerial pc(USBTX,USBRX,9600);
00006 HEPTA_EPS eps(p16,p26);
00007 I2C i2c(p28,p27);
00008 
00009 float magnet[3];
00010 char cmd[2]={0};
00011 char send[1], get[1];
00012 int data[8]={0};
00013 char temp; //temperature
00014 
00015 int main() {
00016     i2c.frequency(100000);
00017     pc.printf("magnet setting\r\n");
00018     cmd[0]=0x4B; 
00019     cmd[1]=0x01;
00020     i2c.write(MAG,cmd,2);
00021     cmd[0]=0x4C; 
00022     cmd[1]=0x00;
00023     i2c.write(MAG,cmd,2);
00024     cmd[0]=0x4E; 
00025     cmd[1]=0x84;
00026     i2c.write(MAG,cmd,2);
00027     cmd[0]=0x51; 
00028     cmd[1]=0x04;
00029     i2c.write(MAG,cmd,2);
00030     cmd[0]=0x52; 
00031     cmd[1]=0x16;
00032     i2c.write(MAG,cmd,2);
00033     cmd[0]=0x00;
00034     i2c.write(MAG,cmd,1,1);
00035     i2c.read(MAG,cmd,1);
00036     while(1) {
00037         for(int i=0;i<8;i++){
00038         send[0]=(char)(0x42+i);
00039         i2c.write(MAG,send,1);
00040         i2c.read(MAG,get,1);
00041         temp=get[0];
00042         data[i]=temp;
00043         }
00044         for(int i=0;i<3;i++){
00045             if(i!=2)magnet[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 3;
00046             else magnet[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 1;
00047             if(i==2 && magnet[i]>16383)magnet[i]-=32768;
00048             else if(i!=2 && magnet[i]>4095)magnet[i]-=8092;
00049         }
00050         pc.printf("mx = %2.4f, my = %2.4f, mz = %2.4f\r\n\n",magnet[0],magnet[1],magnet[2]);
00051         wait(1);
00052     }
00053 }