HeptaSat
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Nov 8 2022 03:26:43 by
1.7.2