def _mag_callback(self):
     '''
     Update magnetometer Vector3d object (if data available)
     '''
     try:  # If read fails, returns last valid data and
         self._read(self.buf1, 0x02,
                    self._mag_addr)  # increments mag_stale_count
         if self.buf1[0] & 1 == 0:
             return self._mag  # Data not ready: return last value
         self._read(self.buf6, 0x03, self._mag_addr)
         self._read(self.buf1, 0x09, self._mag_addr)
     except OSError:
         raise MPUException(self._I2Cerror)
     if self.buf1[0] & 0x08 > 0:  # An overflow has occurred
         self._mag_stale_count += 1  # Error conditions retain last good value
         return  # user should check for ever increasing stale_counts
     self._mag._ivector[1] = bytes_toint(
         self.buf6[1],
         self.buf6[0])  # Note axis twiddling and little endian
     self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
     self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
     scale = 0.15  # scale is 0.15uT/LSB
     self._mag._vector[
         0] = self._mag._ivector[0] * self.mag_correction[0] * scale
     self._mag._vector[
         1] = self._mag._ivector[1] * self.mag_correction[1] * scale
     self._mag._vector[
         2] = self._mag._ivector[2] * self.mag_correction[2] * scale
     self._mag_stale_count = 0
 def _mag_callback(self):
     '''
     Update magnetometer Vector3d object (if data available)
     '''
     try:  # If read fails, returns last valid data
         if self.mag_ready:  # Starts mag if necessary
             self._read(self.buf6, 0x03, self._mag_addr)
             self.mag_triggered = False
         else:
             self._mag_stale_count += 1  # Data not ready: retain last value
             return  # but increment stale count
         self._read(self.buf6, 0x03, self._mag_addr)  # Mag was ready
         self._read(self.buf1, 0x09, self._mag_addr)  # Read ST2
     except OSError:
         self.mag_triggered = False
         raise MPUException(self._I2Cerror)
     if self.buf1[0] & 0x0C > 0:  # An overflow or data error has occurred
         self._mag_stale_count += 1  # transitory condition? User checks stale count.
         return
     self._mag._ivector[1] = bytes_toint(
         self.buf6[1],
         self.buf6[0])  # Note axis twiddling and little endian
     self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
     self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
     scale = 0.3  # 0.3uT/LSB
     self._mag._vector[
         0] = self._mag._ivector[0] * self.mag_correction[0] * scale
     self._mag._vector[
         1] = self._mag._ivector[1] * self.mag_correction[1] * scale
     self._mag._vector[
         2] = self._mag._ivector[2] * self.mag_correction[2] * scale
     self._mag_stale_count = 0
 def _mag_callback(self):
     '''
     Update magnetometer Vector3d object (if data available)
     '''
     try:                                    # If read fails, returns last valid data
         if self.mag_ready:                  # Starts mag if necessary
             self._read(self.buf6, 0x03, self._mag_addr)
             self.mag_triggered = False
         else:
             self._mag_stale_count += 1      # Data not ready: retain last value
             return                          # but increment stale count
         self._read(self.buf6, 0x03, self._mag_addr) # Mag was ready
         self._read(self.buf1, 0x09, self._mag_addr) # Read ST2
     except OSError:
         self.mag_triggered = False
         raise MPUException(self._I2Cerror)
     if self.buf1[0] & 0x0C > 0:             # An overflow or data error has occurred
         self._mag_stale_count +=1           # transitory condition? User checks stale count.
         return
     self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])  # Note axis twiddling and little endian
     self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
     self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
     scale = 0.3                             # 0.3uT/LSB
     self._mag._vector[0] =  self._mag._ivector[0]*self.mag_correction[0]*scale
     self._mag._vector[1] =  self._mag._ivector[1]*self.mag_correction[1]*scale
     self._mag._vector[2] =  self._mag._ivector[2]*self.mag_correction[2]*scale
     self._mag_stale_count = 0
 def get_mag_irq(self):                      # Uncorrected values because floating point uses heap
     if not self.mag_triggered:              # Can't do exception handling here
         self._write(1, 0x0A, self._mag_addr)
         self.mag_triggered = True
     self._read(self.buf1, 0x02, self._mag_addr)
     if self.buf1[0] == 1:
         self._read(self.buf6, 0x03, self._mag_addr) # Note axis twiddling
         self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])
         self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
         self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
         self.mag_triggered = False
 def get_mag_irq(
         self):  # Uncorrected values because floating point uses heap
     if not self.mag_triggered:  # Can't do exception handling here
         self._write(1, 0x0A, self._mag_addr)
         self.mag_triggered = True
     self._read(self.buf1, 0x02, self._mag_addr)
     if self.buf1[0] == 1:
         self._read(self.buf6, 0x03, self._mag_addr)  # Note axis twiddling
         self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])
         self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
         self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
         self.mag_triggered = False
Exemple #6
0
 def get_mag_irq(self):
     '''
     Uncorrected values because floating point uses heap
     '''
     self._read(self.buf1, 0x02, self._mag_addr)
     if self.buf1[0] == 1:                   # Data is ready
         self._read(self.buf6, 0x03, self._mag_addr)
         self._read(self.buf1, 0x09, self._mag_addr)    # Mandatory status2 read
         self._mag._ivector[1] = 0
         if self.buf1[0] & 0x08 == 0:        # No overflow has occurred
             self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])
             self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
             self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
Exemple #7
0
 def get_mag_irq(self):
     '''
     Uncorrected values because floating point uses heap
     '''
     self._read(self.buf1, 0x02, self._mag_addr)
     if self.buf1[0] == 1:                   # Data is ready
         self._read(self.buf6, 0x03, self._mag_addr)
         self._read(self.buf1, 0x09, self._mag_addr)    # Mandatory status2 read
         self._mag._ivector[1] = 0
         if self.buf1[0] & 0x08 == 0:        # No overflow has occurred
             self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])
             self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
             self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
 def temperature(self):
     '''
     Returns the temperature in degree C.
     '''
     try:
         self._read(self.buf2, 0x41, self.mpu_addr)
     except OSError:
         raise MPUException(self._I2Cerror)
     return bytes_toint(self.buf2[0], self.buf2[1]) / 340 + 35  # I think
 def temperature(self):
     '''
     Returns the temperature in degree C.
     '''
     try:
         self._read(self.buf2, 0x41, self.mpu_addr)
     except OSError:
         raise MPUException(self._I2Cerror)
     return bytes_toint(self.buf2[0], self.buf2[1])/340 + 35 # I think
Exemple #10
0
 def _mag_callback(self):
     '''
     Update magnetometer Vector3d object (if data available)
     '''
     try:                                    # If read fails, returns last valid data and
         self._read(self.buf1, 0x02, self._mag_addr)  # increments mag_stale_count
         if self.buf1[0] & 1 == 0:
             return self._mag                # Data not ready: return last value
         self._read(self.buf6, 0x03, self._mag_addr)
         self._read(self.buf1, 0x09, self._mag_addr)
     except OSError:
         raise MPUException(self._I2Cerror)
     if self.buf1[0] & 0x08 > 0:             # An overflow has occurred
         self._mag_stale_count += 1          # Error conditions retain last good value
         return                              # user should check for ever increasing stale_counts
     self._mag._ivector[1] = bytes_toint(self.buf6[1], self.buf6[0])  # Note axis twiddling and little endian
     self._mag._ivector[0] = bytes_toint(self.buf6[3], self.buf6[2])
     self._mag._ivector[2] = -bytes_toint(self.buf6[5], self.buf6[4])
     scale = 0.15                            # scale is 0.15uT/LSB
     self._mag._vector[0] = self._mag._ivector[0]*self.mag_correction[0]*scale
     self._mag._vector[1] = self._mag._ivector[1]*self.mag_correction[1]*scale
     self._mag._vector[2] = self._mag._ivector[2]*self.mag_correction[2]*scale
     self._mag_stale_count = 0