kyunsat / Mbed 2 deprecated MAG3110_2

Dependencies:   MotionSensor mbed

Fork of MAG3110 by kyunsat

Committer:
Nike3221
Date:
Mon Jan 16 14:23:38 2017 +0000
Revision:
8:c8512336fa70
Parent:
7:a8a59a2b6cf6
Child:
9:3f585b1f304d
MAG3110

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nike3221 7:a8a59a2b6cf6 1 /*
Nike3221 7:a8a59a2b6cf6 2 * MAG3110 Sensor Library for mbed
Nike3221 7:a8a59a2b6cf6 3 * TODO: Add proper header
Nike3221 7:a8a59a2b6cf6 4 */
Nike3221 7:a8a59a2b6cf6 5
Nike3221 7:a8a59a2b6cf6 6
Nike3221 7:a8a59a2b6cf6 7 #include "mbed.h"
Nike3221 7:a8a59a2b6cf6 8 #include "MotionSensor.h"
Nike3221 7:a8a59a2b6cf6 9 #include "MAG3110.h"
Nike3221 7:a8a59a2b6cf6 10
Nike3221 7:a8a59a2b6cf6 11 Serial pc(USBTX,USBRX);
Nike3221 7:a8a59a2b6cf6 12 int16_t x,y,z;
Nike3221 7:a8a59a2b6cf6 13 LocalFileSystem local("local");
Nike3221 8:c8512336fa70 14 MAG3110 mag(p28,p27);
Nike3221 8:c8512336fa70 15 DigitalIn local_on(p20);
Nike3221 8:c8512336fa70 16 DigitalIn local_del(p19);
Nike3221 8:c8512336fa70 17 DigitalOut bit1(LED4);
Nike3221 8:c8512336fa70 18 DigitalOut bit2(LED3);
Nike3221 8:c8512336fa70 19 DigitalOut bit3(LED2);
Nike3221 8:c8512336fa70 20 DigitalOut bit4(LED1);
Nike3221 7:a8a59a2b6cf6 21
Nike3221 8:c8512336fa70 22 int offset_x,offset_y;
Nike3221 8:c8512336fa70 23 int x_max,y_max,x_min,y_min;
Nike3221 8:c8512336fa70 24 int count_offset;
Nike3221 7:a8a59a2b6cf6 25
Nike3221 7:a8a59a2b6cf6 26
Nike3221 8:c8512336fa70 27 void init(){
Nike3221 8:c8512336fa70 28
Nike3221 8:c8512336fa70 29 x_max = -32500;//x,yの最大値を初期化
Nike3221 8:c8512336fa70 30 y_max = -32500;
Nike3221 8:c8512336fa70 31 x_min = 32500;
Nike3221 8:c8512336fa70 32 y_min = 32500;
Nike3221 8:c8512336fa70 33
Nike3221 8:c8512336fa70 34 }
Nike3221 8:c8512336fa70 35
Nike3221 8:c8512336fa70 36 int offset(int x_rd,int y_rd){
Nike3221 8:c8512336fa70 37
Nike3221 8:c8512336fa70 38 if(x_max == 0 || y_max == 0 || x_min == 0 || y_min == 0){
Nike3221 8:c8512336fa70 39 init();}//最大値、最小値に0が入った時初期化
Nike3221 8:c8512336fa70 40
Nike3221 8:c8512336fa70 41 if(x_max<x_rd && x_rd != 0){
Nike3221 8:c8512336fa70 42 x_max=x_rd;}
Nike3221 8:c8512336fa70 43
Nike3221 8:c8512336fa70 44 if(y_max<y_rd && y_rd != 0){
Nike3221 8:c8512336fa70 45 y_max=y_rd;}
Nike3221 8:c8512336fa70 46
Nike3221 8:c8512336fa70 47 if(x_min>x_rd && x_rd != 0){
Nike3221 8:c8512336fa70 48 x_min=x_rd;}
Nike3221 8:c8512336fa70 49
Nike3221 8:c8512336fa70 50 if(y_min>y_rd && y_rd != 0){
Nike3221 8:c8512336fa70 51 y_min=y_rd;}
Nike3221 8:c8512336fa70 52
Nike3221 8:c8512336fa70 53 offset_x = ((abs(x_min)+abs(x_max))/2);
Nike3221 8:c8512336fa70 54 offset_y = ((abs(y_min)+abs(y_max))/2);
Nike3221 8:c8512336fa70 55
Nike3221 8:c8512336fa70 56 //offset_x = (x_min + x_max)/2;
Nike3221 8:c8512336fa70 57 //offset_y = (y_min + y_max)/2;
Nike3221 8:c8512336fa70 58
Nike3221 8:c8512336fa70 59 count_offset++;
Nike3221 8:c8512336fa70 60 if(count_offset > 300){//300個分のサンプ取得
Nike3221 8:c8512336fa70 61 x = x + offset_x;
Nike3221 8:c8512336fa70 62 y = y - offset_y;}
Nike3221 8:c8512336fa70 63
Nike3221 8:c8512336fa70 64 return 0;
Nike3221 8:c8512336fa70 65 }
Nike3221 8:c8512336fa70 66
Nike3221 8:c8512336fa70 67 void save(){
Nike3221 8:c8512336fa70 68
Nike3221 8:c8512336fa70 69 bit1=1;//led4を1にしてデータを保存
Nike3221 8:c8512336fa70 70 FILE *fp = fopen("/local/commpas_new.txt","a");
Nike3221 8:c8512336fa70 71 fprintf(fp,"%d,%d,%d\n",x,y,z);
Nike3221 8:c8512336fa70 72 fclose(fp);
Nike3221 8:c8512336fa70 73 bit1=0;
Nike3221 8:c8512336fa70 74
Nike3221 8:c8512336fa70 75 if(local_del == 1){//pin19がhighの時、保存したデータを消去
Nike3221 8:c8512336fa70 76 bit2=1;//led3を1
Nike3221 8:c8512336fa70 77 if(remove("/local/commpas_new.txt") == 0){
Nike3221 8:c8512336fa70 78 pc.printf("delete finished");}}
Nike3221 8:c8512336fa70 79 else{bit2=0;}
Nike3221 8:c8512336fa70 80
Nike3221 8:c8512336fa70 81 }
Nike3221 7:a8a59a2b6cf6 82
Nike3221 7:a8a59a2b6cf6 83 int main(){
Nike3221 8:c8512336fa70 84
Nike3221 8:c8512336fa70 85 mag.enable();//コンパス有効化
Nike3221 7:a8a59a2b6cf6 86 mag.sampleRate(0x80);
Nike3221 8:c8512336fa70 87 init(); //初期化
Nike3221 8:c8512336fa70 88
Nike3221 8:c8512336fa70 89 while(1){
Nike3221 7:a8a59a2b6cf6 90
Nike3221 8:c8512336fa70 91 //void disable(void);
Nike3221 8:c8512336fa70 92 //uint32_t whoAmI(void);
Nike3221 8:c8512336fa70 93 //uint32_t dataReady(void);
Nike3221 8:c8512336fa70 94 mag.getX(&x);
Nike3221 8:c8512336fa70 95 mag.getY(&y);
Nike3221 8:c8512336fa70 96 mag.getZ(&z);
Nike3221 8:c8512336fa70 97 //void getX(float * x);
Nike3221 8:c8512336fa70 98 //void getY(float * y);
Nike3221 8:c8512336fa70 99 //void getZ(float * z);
Nike3221 8:c8512336fa70 100 //void getAxis(MotionSensorDataCounts &data);
Nike3221 8:c8512336fa70 101 //void getAxis(MotionSensorDataUnits &data);
Nike3221 8:c8512336fa70 102 //void readRegs(int addr, uint8_t * data, int len);
Nike3221 8:c8512336fa70 103 offset(x,y);//x,y オフセット計算
Nike3221 8:c8512336fa70 104 if(local_on == 1){save();}//データ保存
Nike3221 8:c8512336fa70 105 pc.printf("x: %d y: %d z: %d x_max: %d x_min: %d\n",x,y,z,x_max,x_min);
Nike3221 8:c8512336fa70 106
Nike3221 8:c8512336fa70 107 }
Nike3221 7:a8a59a2b6cf6 108 }