@@ -674,7 +674,8 @@ def __init__(self):
674674 time .sleep_ms (100 )
675675 self ._writeReg (0x1A , 255 )
676676 self ._writeReg (0x1B , 0b10100001 )
677- self ._writeReg (0x1C , 0b00000011 )
677+ # self._writeReg(0x1C, 0b00000011)
678+ self ._writeReg (0x1C , 0b00000000 )
678679 self ._writeReg (0x1D , 0b10010000 )
679680 time .sleep_ms (100 )
680681
@@ -760,37 +761,40 @@ def _get_raw(self):
760761 retry = 0
761762 if (retry < 5 ):
762763 try :
763- _raw_x = 0
764- _raw_y = 0
765- _raw_z = 0
764+ _raw_x = 0.0
765+ _raw_y = 0.0
766+ _raw_z = 0.0
767+
768+ # self.i2c.writeto(self.addr, b'\x1B\x08', True) #set
769+ # self.i2c.writeto(self.addr, b'\x1B\x01', True)
770+
771+ # while True:
772+ # buf = self._readReg(0x18, 1)
773+ # status = buf[0]
774+ # if(status & 0x40):
775+ # break
776+
777+ # _buf = self._readReg(0x00, 9)
778+
779+ self .i2c .writeto (self .addr , b'\x1B \x08 ' , True ) #set
780+ # self.i2c.writeto(self.addr, b'\x1B\x80', True)
781+ self .i2c .writeto (self .addr , b'\x1B \x01 ' , True )
782+
766783 while True :
767- self ._writeReg (0x1B ,0b10100001 )
768- time .sleep_ms (10 )
784+ sleep_ms (25 )
769785 buf = self ._readReg (0x18 , 1 )
770786 status = buf [0 ]
771- # print('status:',status)
772787 if (status & 0x40 ):
773788 break
774- # self.i2c.writeto(self.addr, b'\x00', False)
775- # buf = self.i2c.readfrom(self.addr, 9)
789+
776790 buf = self ._readReg (0x00 , 9 )
777791
778- _raw_x |= buf [0 ] << 12
779- _raw_x |= buf [1 ] << 4
780- # _raw_x |= buf[6] << 0
781- _raw_x |= buf [6 ] >> 4
782- self .raw_x = _raw_x
792+ _raw_x = (buf [0 ] << 12 ) | (buf [1 ] << 4 ) | (buf [6 ] >> 4 )
793+ _raw_y = (buf [2 ] << 12 ) | (buf [3 ] << 4 ) | (buf [7 ] >> 4 )
794+ _raw_z = (buf [4 ] << 12 ) | (buf [5 ] << 4 ) | (buf [8 ] >> 4 )
783795
784- _raw_y |= buf [2 ] << 12
785- _raw_y |= buf [3 ] << 4
786- # _raw_y |= buf[7] << 0
787- _raw_y |= buf [7 ] >> 4
796+ self .raw_x = _raw_x
788797 self .raw_y = _raw_y
789-
790- _raw_z |= buf [4 ] << 12
791- _raw_z |= buf [5 ] << 4
792- # _raw_z |= buf[8] << 0
793- _raw_z |= buf [8 ] >> 4
794798 self .raw_z = _raw_z
795799 except :
796800 retry = retry + 1
@@ -819,29 +823,35 @@ def get_x(self):
819823 return self .raw_x * 0.25
820824 if (self .chip == 2 ):
821825 self ._get_raw ()
822- # return -0.0625 * (self.raw_x - 524288)
823- # return -0.0625 * (self.raw_x - self.cali_offset_x - 524288)
824- return - (self .raw_x - 524288 )/ 16384
826+ if (self .cali_offset_x ):
827+ return - 0.0625 * (self .raw_x - self .cali_offset_x )
828+ else :
829+ return - 0.0625 * (self .raw_x - 524288 )
830+ # return -(self.raw_x - 524288)/16384
825831
826832 def get_y (self ):
827833 if (self .chip == 1 ):
828834 self ._get_raw ()
829835 return self .raw_y * 0.25
830836 if (self .chip == 2 ):
831837 self ._get_raw ()
832- # return -0.0625 * (self.raw_y - self.cali_offset_y - 524288)
833- # return -0.0625 * (self.raw_y - 524288)
834- return - (self .raw_y - 524288 )/ 16384
838+ if (self .cali_offset_y ):
839+ return - 0.0625 * (self .raw_y - self .cali_offset_y )
840+ else :
841+ return - 0.0625 * (self .raw_y - 524288 )
842+ # return -(self.raw_y - 524288)/16384
835843
836844 def get_z (self ):
837845 if (self .chip == 1 ):
838846 self ._get_raw ()
839847 return self .raw_z * 0.25
840848 if (self .chip == 2 ):
841849 self ._get_raw ()
842- # return 0.0625 * (self.raw_z - 524288)
843- # return 0.0625 * (self.raw_z - self.cali_offset_z - 524288)
844- return (self .raw_z - 524288 )/ 16384
850+ if (self .cali_offset_z ):
851+ return 0.0625 * (self .raw_z - self .cali_offset_z )
852+ else :
853+ return 0.0625 * (self .raw_z - 524288 )
854+ # return (self.raw_z - 524288)/16384
845855
846856 def get_field_strength (self ):
847857 if (self .chip == 1 ):
@@ -852,7 +862,7 @@ def get_field_strength(self):
852862 elif (self .chip == 2 ):
853863 self ._get_raw ()
854864 if self .is_peeling == 1 :
855- return (math .sqrt (math .pow (self .raw_x - self .peeling_x - 524288 , 2 ) + pow (self .raw_y - self .peeling_y - 524288 , 2 ) + pow (self .raw_z - self .peeling_z - 524288 , 2 )))* 0.0625
865+ return (math .sqrt (math .pow (self .raw_x - self .peeling_x , 2 ) + pow (self .raw_y - self .peeling_y , 2 ) + pow (self .raw_z - self .peeling_z , 2 )))* 0.0625
856866 return (math .sqrt (math .pow (self .get_x (), 2 ) + pow (self .get_y (), 2 ) + pow (self .get_z (), 2 )))
857867
858868 def calibrate (self ):
@@ -909,10 +919,11 @@ def get_heading(self):
909919 else :
910920 if (self .cali_offset_x ):
911921 self ._get_raw ()
912- temp_x = self .raw_x - self .cali_offset_x
913- temp_y = self .raw_y - self .cali_offset_y
922+ temp_x = - ( self .raw_x - self .cali_offset_x )
923+ temp_y = - ( self .raw_y - self .cali_offset_y )
914924 heading = math .atan2 (temp_y , - temp_x ) * (180 / 3.14159265 ) + 180 + 3
915- heading = math .atan2 (self .get_y (), - self .get_x ()) * (180 / 3.14159265 ) + 180 + 3
925+ else :
926+ heading = math .atan2 (self .get_y (), - self .get_x ()) * (180 / 3.14159265 ) + 180 + 3
916927 return heading
917928
918929 def _get_temperature (self ):
0 commit comments