mirror of https://github.com/Trivernis/spydian.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
7 years ago
|
# !/usr/bin/python
|
||
|
import smbus
|
||
|
import math
|
||
|
|
||
|
# Register
|
||
|
power_mgmt_1 = 0x6b
|
||
|
power_mgmt_2 = 0x6c
|
||
|
|
||
|
bus = smbus.SMBus(1)
|
||
|
address = 0x68
|
||
|
bus.write_byte_data(address, power_mgmt_1, 0)
|
||
|
|
||
|
def read_byte(reg):
|
||
|
return bus.read_byte_data(address, reg)
|
||
|
|
||
|
def read_word(reg):
|
||
|
h = bus.read_byte_data(address, reg)
|
||
|
l = bus.read_byte_data(address, reg + 1)
|
||
|
value = (h << 8) + l
|
||
|
return value
|
||
|
|
||
|
def read_word_2c(reg):
|
||
|
val = read_word(reg)
|
||
|
if (val >= 0x8000):
|
||
|
return -((65535 - val) + 1)
|
||
|
else:
|
||
|
return val
|
||
|
|
||
|
def dist(a, b):
|
||
|
return math.sqrt((a * a) + (b * b))
|
||
|
|
||
|
def get_y_rotation(x, y, z):
|
||
|
radians = math.atan2(x, dist(y, z))
|
||
|
return -math.degrees(radians)
|
||
|
|
||
|
def get_x_rotation(x, y, z):
|
||
|
radians = math.atan2(y, dist(x, z))
|
||
|
return math.degrees(radians)
|
||
|
|
||
|
def getAllOut():
|
||
|
gyroskop_xout = read_word_2c(0x43)
|
||
|
gyroskop_yout = read_word_2c(0x45)
|
||
|
gyroskop_zout = read_word_2c(0x47)
|
||
|
|
||
|
beschleunigung_xout = read_word_2c(0x3b)
|
||
|
beschleunigung_yout = read_word_2c(0x3d)
|
||
|
beschleunigung_zout = read_word_2c(0x3f)
|
||
|
|
||
|
beschleunigung_xout_skaliert = round(beschleunigung_xout / 16384.0,3)
|
||
|
beschleunigung_yout_skaliert = round(beschleunigung_yout / 16384.0,3)
|
||
|
beschleunigung_zout_skaliert = round(beschleunigung_zout / 16384.0,3)
|
||
|
|
||
|
x_rotation = round(get_x_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert),0)
|
||
|
y_rotation = round(get_y_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert),0)
|
||
|
|
||
|
return {'acc':[beschleunigung_xout,beschleunigung_yout,beschleunigung_zout], 'acc_sca':[beschleunigung_xout_skaliert,beschleunigung_yout_skaliert,beschleunigung_zout_skaliert],'rot':[x_rotation,y_rotation]}
|