Skip to content

Instantly share code, notes, and snippets.

@boochow
Created December 4, 2018 14:52
Show Gist options
  • Save boochow/e8eb581013915ba8c298108cfe368e5c to your computer and use it in GitHub Desktop.
Save boochow/e8eb581013915ba8c298108cfe368e5c to your computer and use it in GitHub Desktop.
import machine
import struct
import utime
I2C_2 = machine.I2C(2)
LSM6DSL_ADDR = 106
LSM6DSL_REG_CTRL1_XL = 0x10
LSM6DSL_REG_CTRL2_G = 0x11
LSM6DSL_REG_OUT_TEMP_H = 0x21
LSM6DSL_REG_OUT_TEMP_L = 0x20
LSM6DSL_REG_OUTX_L_G = 0x22
LSM6DSL_REG_OUTX_H_G = 0x23
LSM6DSL_REG_OUTY_L_G = 0x24
LSM6DSL_REG_OUTY_H_G = 0x25
LSM6DSL_REG_OUTZ_L_G = 0x26
LSM6DSL_REG_OUTZ_H_G = 0x27
LSM6DSL_REG_OUTX_L_XL = 0x28
LSM6DSL_REG_OUTX_H_XL = 0x29
LSM6DSL_REG_OUTY_L_XL = 0x2A
LSM6DSL_REG_OUTY_H_XL = 0x2B
LSM6DSL_REG_OUTZ_L_XL = 0x2C
LSM6DSL_REG_OUTZ_H_XL = 0x2D
HIGH_PERF_416HZ = b'\x60'
HIGH_PERF_6KHZ = b'\xA0'
XL_SCALE_2G = 0.061
XL_NEG_OFFSET = 3.997739
G_SCALE_245 = 0.00875043752188
G_NEG_OFFSET = 573.46867343388304
def init():
I2C_2.writeto_mem(LSM6DSL_ADDR, LSM6DSL_REG_CTRL1_XL, HIGH_PERF_6KHZ)
I2C_2.writeto_mem(LSM6DSL_ADDR, LSM6DSL_REG_CTRL2_G, HIGH_PERF_6KHZ)
def _read_hl_registers(addr, reg_h, reg_l):
hb = I2C_2.readfrom_mem(LSM6DSL_ADDR, reg_h, 1)
lb = I2C_2.readfrom_mem(LSM6DSL_ADDR, reg_l, 1)
byte_value = struct.unpack('>H', hb+lb)[0]
return byte_value, hb[0], lb[0]
def get_accel():
x_byte_val, x_hb, x_lb = _read_hl_registers(LSM6DSL_ADDR, LSM6DSL_REG_OUTX_H_XL, LSM6DSL_REG_OUTX_L_XL)
y_byte_val, y_hb, y_lb = _read_hl_registers(LSM6DSL_ADDR, LSM6DSL_REG_OUTY_H_XL, LSM6DSL_REG_OUTY_L_XL)
z_byte_val, z_hb, z_lb = _read_hl_registers(LSM6DSL_ADDR, LSM6DSL_REG_OUTZ_H_XL, LSM6DSL_REG_OUTZ_L_XL)
x_val = (x_byte_val * XL_SCALE_2G) / 1000.0 #from milligraviy to gravity (mg -> g)
y_val = (y_byte_val * XL_SCALE_2G) / 1000.0
z_val = (z_byte_val * XL_SCALE_2G) / 1000.0
if x_hb & 0x80:
x_val -= XL_NEG_OFFSET
if y_hb & 0x80:
y_val -= XL_NEG_OFFSET
if z_hb & 0x80:
z_val -= XL_NEG_OFFSET
return x_val, y_val, z_val
init()
import pyb
hid = pyb.USB_HID()
sw = pyb.Switch()
def mousetest(n,d):
for i in range(n):
x,y,z = get_accel()
btn = 1 if sw.value() else 0
hid.send((btn, int(10 * x), int(10 * y), 0))
pyb.delay(d)
mousetest(10000,10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment