MyArduino=arduino();    %PCと接続されているArduinoとMatlabの通信開始
bus=0;  %磁場センサーが接続されているArduinoのI2C通信のバス指定
Bsensor = device(MyArduino,'I2CAddress',char(scanI2CBus(MyArduino,bus)),'bus',bus); %磁場センサーとの接続

%%

CTRL_REG1   = 0x20;
CTRL_REG2   = 0x21;
CTRL_REG3   = 0x22;
CTRL_REG4   = 0x23;

OUT_X_L     = 0x28;

GN=6842;    %感度[LSB/gauss]
mG=10^(-3);

%%

writeRegister(Bsensor,CTRL_REG1,bin2dec('01110000'))    %OM = 11 (ultra-high-performance mode for X and Y); DO = 100 (10 Hz ODR)
writeRegister(Bsensor,CTRL_REG2,bin2dec('00000000'))    %FS = 00 (+/- 4 gauss full scale)
writeRegister(Bsensor,CTRL_REG3,bin2dec('00000000'))    %MD = 00 (continuous-conversion mode)
writeRegister(Bsensor,CTRL_REG4,bin2dec('00001100'))    %OMZ = 11 (ultra-high-performance mode for Z)

%%

write(Bsensor,OUT_X_L);  %OUT_X_Lレジスタを指定
Bdata=uint16(read(Bsensor,6,'uint8'));  %OUT_X_L,OUT_X_H,OUT_Y_L,OUT_Y_H,OUT_Z_L,OUT_Z_Hと順番に8bit×6のデータ取得

Bx=typecast(bitor(bitshift(Bdata(2),8),Bdata(1)),'int16');  %Bxのbitデータを連結
By=typecast(bitor(bitshift(Bdata(4),8),Bdata(3)),'int16');  %Byのbitデータを連結
Bz=typecast(bitor(bitshift(Bdata(6),8),Bdata(5)),'int16');  %Bzのbitデータを連結

Bx=double(Bx)/GN/mG;    %Bx[mGauss]
By=double(By)/GN/mG;    %By[mGauss]
Bz=double(Bz)/GN/mG;    %Bz[mGauss]
