Rev 224 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
import serialdef twos_comp(val, bits):'''Convert given value from two's complement to integer'''if ((val & (1 << (bits-1))) != 0):val = val - (1 << bits)return valif __name__ == '__main__':print("Attempting to connect to serial port...")# Connect to specified serial portser = serial.Serial()ser.baudrate = 115200ser.port = "COM3"ser.timeout = 3 # Three second timeouttry:ser.open()print("Connected to serial port.")# Loop reading in data from the sensorwhile(1):s = ser.read(21)# Ensure that the data properly ends in a newlineif s[20] == ord('\n'):# Read in accelerometer data and convert from two's complimentA_X = ((s[1] << 8) | s[0])A_Y = ((s[3] << 8) | s[2])A_Z = ((s[5] << 8) | s[4])A_X_N = twos_comp(A_X, 16) >> 4A_Y_N = twos_comp(A_Y, 16) >> 4A_Z_N = twos_comp(A_Z, 16) >> 4# Read in gyroscope data and convert from two's complimentG_Y = (s[7] << 8) | s[6]G_X = (s[9] << 8) | s[8]G_Z = (s[11] << 8) | s[10]G_X_N = twos_comp(G_X, 16)G_Y_N = twos_comp(G_Y, 16)G_Z_N = twos_comp(G_Z, 16)# Read in magnetometer data and convert from two's complimentM_X = ((s[13] << 8) | s[12])M_Y = ((s[15] << 8) | s[14])M_Z = ((s[17] << 8) | s[16])M_X_N = twos_comp(M_X, 16)M_Y_N = twos_comp(M_Y, 16)M_Z_N = twos_comp(M_Z, 16)# Read in battery statusB_H = s[18]B_L = s[19]# Print out the processed dataprint("A: %-6i %-6i %-6i G: %-6i %-6i %-6i M: %-6i %-6i %-6i B: %u.%u" % \(A_X_N, A_Y_N, A_Z_N, G_X_N, G_Y_N, G_Z_N, M_X_N, M_Y_N, M_Z_N, B_H, B_L))else:breakexcept:passser.close()