5656NDOF_FMC_OFF_MODE  =  const (0x0B )
5757NDOF_MODE  =  const (0x0C )
5858
59+ ACCEL_2G  =  const (0x00 )  # For accel_range property 
60+ ACCEL_4G  =  const (0x01 )  # Default 
61+ ACCEL_8G  =  const (0x02 )
62+ ACCEL_16G  =  const (0x03 )
63+ ACCEL_7_81HZ  =  const (0x00 )  # For accel_bandwidth property 
64+ ACCEL_15_63HZ  =  const (0x04 )
65+ ACCEL_31_25HZ  =  const (0x08 )
66+ ACCEL_62_5HZ  =  const (0x0C )  # Default 
67+ ACCEL_125HZ  =  const (0x10 )
68+ ACCEL_250HZ  =  const (0x14 )
69+ ACCEL_500HZ  =  const (0x18 )
70+ ACCEL_1000HZ  =  const (0x1C )
71+ ACCEL_NORMAL_MODE  =  const (0x00 )  # Default. For accel_mode property 
72+ ACCEL_SUSPEND_MODE  =  const (0x20 )
73+ ACCEL_LOWPOWER1_MODE  =  const (0x40 )
74+ ACCEL_STANDBY_MODE  =  const (0x60 )
75+ ACCEL_LOWPOWER2_MODE  =  const (0x80 )
76+ ACCEL_DEEPSUSPEND_MODE  =  const (0xA0 )
77+ 
78+ GYRO_2000_DPS  =  const (0x00 )  # Default. For gyro_range property 
79+ GYRO_1000_DPS  =  const (0x01 )
80+ GYRO_500_DPS  =  const (0x02 )
81+ GYRO_250_DPS  =  const (0x03 )
82+ GYRO_125_DPS  =  const (0x04 )
83+ GYRO_523HZ  =  const (0x00 )  # For gyro_bandwidth property 
84+ GYRO_230HZ  =  const (0x08 )
85+ GYRO_116HZ  =  const (0x10 )
86+ GYRO_47HZ  =  const (0x18 )
87+ GYRO_23HZ  =  const (0x20 )
88+ GYRO_12HZ  =  const (0x28 )
89+ GYRO_64HZ  =  const (0x30 )
90+ GYRO_32HZ  =  const (0x38 )  # Default 
91+ GYRO_NORMAL_MODE  =  const (0x00 )  # Default. For gyro_mode property 
92+ GYRO_FASTPOWERUP_MODE  =  const (0x01 )
93+ GYRO_DEEPSUSPEND_MODE  =  const (0x02 )
94+ GYRO_SUSPEND_MODE  =  const (0x03 )
95+ GYRO_ADVANCEDPOWERSAVE_MODE  =  const (0x04 )
96+ 
97+ MAGNET_2HZ  =  const (0x00 )  # For magnet_rate property 
98+ MAGNET_6HZ  =  const (0x01 )
99+ MAGNET_8HZ  =  const (0x02 )
100+ MAGNET_10HZ  =  const (0x03 )
101+ MAGNET_15HZ  =  const (0x04 )
102+ MAGNET_20HZ  =  const (0x05 )  # Default 
103+ MAGNET_25HZ  =  const (0x06 )
104+ MAGNET_30HZ  =  const (0x07 )
105+ MAGNET_LOWPOWER_MODE  =  const (0x00 )  # For magnet_operation_mode property 
106+ MAGNET_REGULAR_MODE  =  const (0x08 )  # Default 
107+ MAGNET_ENHANCEDREGULAR_MODE  =  const (0x10 )
108+ MAGNET_ACCURACY_MODE  =  const (0x18 )
109+ MAGNET_NORMAL_MODE  =  const (0x00 )  # for magnet_power_mode property 
110+ MAGNET_SLEEP_MODE  =  const (0x20 )
111+ MAGNET_SUSPEND_MODE  =  const (0x40 )
112+ MAGNET_FORCEMODE_MODE  =  const (0x60 )  # Default 
113+ 
59114_POWER_NORMAL  =  const (0x00 )
60115_POWER_LOW  =  const (0x01 )
61116_POWER_SUSPEND  =  const (0x02 )
62117
63118_MODE_REGISTER  =  const (0x3D )
64119_PAGE_REGISTER  =  const (0x07 )
120+ _ACCEL_CONFIG_REGISTER  =  const (0x08 )
121+ _MAGNET_CONFIG_REGISTER  =  const (0x09 )
122+ _GYRO_CONFIG_0_REGISTER  =  const (0x0A )
123+ _GYRO_CONFIG_1_REGISTER  =  const (0x0B )
65124_CALIBRATION_REGISTER  =  const (0x35 )
66125_OFFSET_ACCEL_REGISTER  =  const (0x55 )
67126_OFFSET_MAGNET_REGISTER  =  const (0x5B )
@@ -113,7 +172,7 @@ def __set__(self, obj, value):
113172        obj .mode  =  last_mode 
114173
115174
116- class  BNO055 :
175+ class  BNO055 :   # pylint: disable=too-many-public-methods 
117176    """ 
118177    Base class for the BNO055 9DOF IMU sensor. 
119178    """ 
@@ -126,6 +185,9 @@ def __init__(self):
126185        self ._write_register (_POWER_REGISTER , _POWER_NORMAL )
127186        self ._write_register (_PAGE_REGISTER , 0x00 )
128187        self ._write_register (_TRIGGER_REGISTER , 0x00 )
188+         self .accel_range  =  ACCEL_4G 
189+         self .gyro_range  =  GYRO_2000_DPS 
190+         self .magnet_rate  =  MAGNET_20HZ 
129191        time .sleep (0.01 )
130192        self .mode  =  NDOF_MODE 
131193        time .sleep (0.01 )
@@ -392,6 +454,184 @@ def gravity(self):
392454    def  _gravity (self ):
393455        raise  NotImplementedError ("Must be implemented." )
394456
457+     @property  
458+     def  accel_range (self ):
459+         """ Switch the accelerometer range and return the new range. Default value: +/- 4g 
460+         See table 3-8 in the datasheet. 
461+         """ 
462+         self ._write_register (_PAGE_REGISTER , 0x01 )
463+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
464+         self ._write_register (_PAGE_REGISTER , 0x00 )
465+         return  0b00000011  &  value 
466+ 
467+     @accel_range .setter  
468+     def  accel_range (self , rng = ACCEL_4G ):
469+         self ._write_register (_PAGE_REGISTER , 0x01 )
470+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
471+         masked_value  =  0b11111100  &  value 
472+         self ._write_register (_ACCEL_CONFIG_REGISTER , masked_value  |  rng )
473+         self ._write_register (_PAGE_REGISTER , 0x00 )
474+ 
475+     @property  
476+     def  accel_bandwidth (self ):
477+         """ Switch the accelerometer bandwidth and return the new bandwidth. Default value: 62.5 Hz 
478+         See table 3-8 in the datasheet. 
479+         """ 
480+         self ._write_register (_PAGE_REGISTER , 0x01 )
481+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
482+         self ._write_register (_PAGE_REGISTER , 0x00 )
483+         return  0b00011100  &  value 
484+ 
485+     @accel_bandwidth .setter  
486+     def  accel_bandwidth (self , bandwidth = ACCEL_62_5HZ ):
487+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
488+             raise  RuntimeError ("Mode must not be a fusion mode" )
489+         self ._write_register (_PAGE_REGISTER , 0x01 )
490+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
491+         masked_value  =  0b11100011  &  value 
492+         self ._write_register (_ACCEL_CONFIG_REGISTER , masked_value  |  bandwidth )
493+         self ._write_register (_PAGE_REGISTER , 0x00 )
494+ 
495+     @property  
496+     def  accel_mode (self ):
497+         """ Switch the accelerometer mode and return the new mode. Default value: Normal 
498+         See table 3-8 in the datasheet. 
499+         """ 
500+         self ._write_register (_PAGE_REGISTER , 0x01 )
501+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
502+         self ._write_register (_PAGE_REGISTER , 0x00 )
503+         return  0b11100000  &  value 
504+ 
505+     @accel_mode .setter  
506+     def  accel_mode (self , mode = ACCEL_NORMAL_MODE ):
507+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
508+             raise  RuntimeError ("Mode must not be a fusion mode" )
509+         self ._write_register (_PAGE_REGISTER , 0x01 )
510+         value  =  self ._read_register (_ACCEL_CONFIG_REGISTER )
511+         masked_value  =  0b00011111  &  value 
512+         self ._write_register (_ACCEL_CONFIG_REGISTER , masked_value  |  mode )
513+         self ._write_register (_PAGE_REGISTER , 0x00 )
514+ 
515+     @property  
516+     def  gyro_range (self ):
517+         """ Switch the gyroscope range and return the new range. Default value: 2000 dps 
518+         See table 3-9 in the datasheet. 
519+         """ 
520+         self ._write_register (_PAGE_REGISTER , 0x01 )
521+         value  =  self ._read_register (_GYRO_CONFIG_0_REGISTER )
522+         self ._write_register (_PAGE_REGISTER , 0x00 )
523+         return  0b00000111  &  value 
524+ 
525+     @gyro_range .setter  
526+     def  gyro_range (self , rng = GYRO_2000_DPS ):
527+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
528+             raise  RuntimeError ("Mode must not be a fusion mode" )
529+         self ._write_register (_PAGE_REGISTER , 0x01 )
530+         value  =  self ._read_register (_GYRO_CONFIG_0_REGISTER )
531+         masked_value  =  0b00111000  &  value 
532+         self ._write_register (_GYRO_CONFIG_0_REGISTER , masked_value  |  rng )
533+         self ._write_register (_PAGE_REGISTER , 0x00 )
534+ 
535+     @property  
536+     def  gyro_bandwidth (self ):
537+         """ Switch the gyroscope bandwidth and return the new bandwidth. Default value: 32 Hz 
538+         See table 3-9 in the datasheet. 
539+         """ 
540+         self ._write_register (_PAGE_REGISTER , 0x01 )
541+         value  =  self ._read_register (_GYRO_CONFIG_0_REGISTER )
542+         self ._write_register (_PAGE_REGISTER , 0x00 )
543+         return  0b00111000  &  value 
544+ 
545+     @gyro_bandwidth .setter  
546+     def  gyro_bandwidth (self , bandwidth = GYRO_32HZ ):
547+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
548+             raise  RuntimeError ("Mode must not be a fusion mode" )
549+         self ._write_register (_PAGE_REGISTER , 0x01 )
550+         value  =  self ._read_register (_GYRO_CONFIG_0_REGISTER )
551+         masked_value  =  0b00000111  &  value 
552+         self ._write_register (_GYRO_CONFIG_0_REGISTER , masked_value  |  bandwidth )
553+         self ._write_register (_PAGE_REGISTER , 0x00 )
554+ 
555+     @property  
556+     def  gyro_mode (self ):
557+         """ Switch the gyroscope mode and return the new mode. Default value: Normal 
558+         See table 3-9 in the datasheet. 
559+         """ 
560+         self ._write_register (_PAGE_REGISTER , 0x01 )
561+         value  =  self ._read_register (_GYRO_CONFIG_1_REGISTER )
562+         self ._write_register (_PAGE_REGISTER , 0x00 )
563+         return  0b00000111  &  value 
564+ 
565+     @gyro_mode .setter  
566+     def  gyro_mode (self , mode = GYRO_NORMAL_MODE ):
567+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
568+             raise  RuntimeError ("Mode must not be a fusion mode" )
569+         self ._write_register (_PAGE_REGISTER , 0x01 )
570+         value  =  self ._read_register (_GYRO_CONFIG_1_REGISTER )
571+         masked_value  =  0b00000000  &  value 
572+         self ._write_register (_GYRO_CONFIG_1_REGISTER , masked_value  |  mode )
573+         self ._write_register (_PAGE_REGISTER , 0x00 )
574+ 
575+     @property  
576+     def  magnet_rate (self ):
577+         """ Switch the magnetometer data output rate and return the new rate. Default value: 20Hz 
578+         See table 3-10 in the datasheet. 
579+         """ 
580+         self ._write_register (_PAGE_REGISTER , 0x01 )
581+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
582+         self ._write_register (_PAGE_REGISTER , 0x00 )
583+         return  0b00000111  &  value 
584+ 
585+     @magnet_rate .setter  
586+     def  magnet_rate (self , rate = MAGNET_20HZ ):
587+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
588+             raise  RuntimeError ("Mode must not be a fusion mode" )
589+         self ._write_register (_PAGE_REGISTER , 0x01 )
590+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
591+         masked_value  =  0b01111000  &  value 
592+         self ._write_register (_MAGNET_CONFIG_REGISTER , masked_value  |  rate )
593+         self ._write_register (_PAGE_REGISTER , 0x00 )
594+ 
595+     @property  
596+     def  magnet_operation_mode (self ):
597+         """ Switch the magnetometer operation mode and return the new mode. Default value: Regular 
598+         See table 3-10 in the datasheet. 
599+         """ 
600+         self ._write_register (_PAGE_REGISTER , 0x01 )
601+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
602+         self ._write_register (_PAGE_REGISTER , 0x00 )
603+         return  0b00011000  &  value 
604+ 
605+     @magnet_operation_mode .setter  
606+     def  magnet_operation_mode (self , mode = MAGNET_REGULAR_MODE ):
607+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
608+             raise  RuntimeError ("Mode must not be a fusion mode" )
609+         self ._write_register (_PAGE_REGISTER , 0x01 )
610+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
611+         masked_value  =  0b01100111  &  value 
612+         self ._write_register (_MAGNET_CONFIG_REGISTER , masked_value  |  mode )
613+         self ._write_register (_PAGE_REGISTER , 0x00 )
614+ 
615+     @property  
616+     def  magnet_mode (self ):
617+         """ Switch the magnetometer power mode and return the new mode. Default value: Forced 
618+         See table 3-10 in the datasheet. 
619+         """ 
620+         self ._write_register (_PAGE_REGISTER , 0x01 )
621+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
622+         self ._write_register (_PAGE_REGISTER , 0x00 )
623+         return  0b01100000  &  value 
624+ 
625+     @magnet_mode .setter  
626+     def  magnet_mode (self , mode = MAGNET_FORCEMODE_MODE ):
627+         if  self .mode  in  [0x08 , 0x09 , 0x0A , 0x0B , 0x0C ]:
628+             raise  RuntimeError ("Mode must not be a fusion mode" )
629+         self ._write_register (_PAGE_REGISTER , 0x01 )
630+         value  =  self ._read_register (_MAGNET_CONFIG_REGISTER )
631+         masked_value  =  0b00011111  &  value 
632+         self ._write_register (_MAGNET_CONFIG_REGISTER , masked_value  |  mode )
633+         self ._write_register (_PAGE_REGISTER , 0x00 )
634+ 
395635    def  _write_register (self , register , value ):
396636        raise  NotImplementedError ("Must be implemented." )
397637
0 commit comments