From 517af872b7d267f430649107b990526b6097e147 Mon Sep 17 00:00:00 2001 From: Jarrad Brown Date: Fri, 27 Feb 2026 15:13:39 -0600 Subject: [PATCH] Updated ADXL345 sandbox test code, trying different library --- uC/main_uC/Mentor/_Sandbox/ADXL345/adxl345.py | 67 +++++++++++++------ uC/main_uC/Mentor/_Sandbox/ADXL345/main.py | 23 ++++--- 2 files changed, 58 insertions(+), 32 deletions(-) diff --git a/uC/main_uC/Mentor/_Sandbox/ADXL345/adxl345.py b/uC/main_uC/Mentor/_Sandbox/ADXL345/adxl345.py index 7c11499..8285049 100644 --- a/uC/main_uC/Mentor/_Sandbox/ADXL345/adxl345.py +++ b/uC/main_uC/Mentor/_Sandbox/ADXL345/adxl345.py @@ -1,26 +1,51 @@ -from micropython import const -from machine import Pin, SoftI2C -# ADXL-345 Registers -_DATA_FORMAT = const(0x31) -_POWER_CTL = const(0x2D) -_DATAX0 = const(0x32) +from machine import Pin,I2C +import math +import time + +device = const(0x53) +regAddress = const(0x32) +TO_READ = 6 +buff = bytearray(6) class ADXL345: - def __init__(self, i2c, address=0x53): + def __init__(self,i2c,addr=device): + self.addr = addr self.i2c = i2c - self.address = address - self.i2c.start() - self.i2c.writeto(self.address, bytearray([_POWER_CTL, 0x08])) # power on - self.i2c.writeto(self.address, bytearray([_DATA_FORMAT, 0x08])) # full resolution mode - self.i2c.stop() + b = bytearray(1) + b[0] = 0 + self.i2c.writeto_mem(self.addr,0x2d,b) + b[0] = 16 + self.i2c.writeto_mem(self.addr,0x2d,b) + b[0] = 8 + self.i2c.writeto_mem(self.addr,0x2d,b) + + @property + def xValue(self): + buff = self.i2c.readfrom_mem(self.addr,regAddress,TO_READ) + x = (int(buff[1]) << 8) | buff[0] + if x > 32767: + x -= 65536 + return x + + @property + def yValue(self): + buff = self.i2c.readfrom_mem(self.addr,regAddress,TO_READ) + y = (int(buff[3]) << 8) | buff[2] + if y > 32767: + y -= 65536 + return y + + @property + def zValue(self): + buff = self.i2c.readfrom_mem(self.addr,regAddress,TO_READ) + z = (int(buff[5]) << 8) | buff[4] + if z > 32767: + z -= 65536 + return z + + def RP_calculate(self,x,y,z): + roll = math.atan2(y , z) * 57.3 + pitch = math.atan2((- x) , math.sqrt(y * y + z * z)) * 57.3 + return roll,pitch - def read(self): - self.i2c.start() - self.i2c.writeto(self.address, bytearray([_DATAX0])) - data = self.i2c.readfrom(self.address, 6) - self.i2c.stop() - x = ((data[1] << 8) | data[0]) - y = ((data[3] << 8) | data[2]) - z = ((data[5] << 8) | data[4]) - return (x, y, z)d \ No newline at end of file diff --git a/uC/main_uC/Mentor/_Sandbox/ADXL345/main.py b/uC/main_uC/Mentor/_Sandbox/ADXL345/main.py index dd0d8a4..de1b363 100644 --- a/uC/main_uC/Mentor/_Sandbox/ADXL345/main.py +++ b/uC/main_uC/Mentor/_Sandbox/ADXL345/main.py @@ -1,15 +1,16 @@ -from machine import Pin, SoftI2C -from adxl345 import ADXL345 +from machine import Pin,I2C +import adxl345 import time -# Define I2C pins -i2c = SoftI2C(scl=Pin(15), sda=Pin(16)) +i2c = I2C(scl=Pin(15),sda=Pin(16), freq=10000) +adx = adxl345.ADXL345(i2c) -# Initialize ADXL345 -accel = ADXL345(i2c) - -# Read accelerometer data while True: - x, y, z = accel.read() - print("x = {}, y = {}, z = {}".format(x, y, z)) - time.sleep(0.2) + x=adx.xValue + y=adx.yValue + z=adx.zValue + print('The acceleration info of x, y, z are:%d,%d,%d'%(x,y,z)) + roll,pitch = adx.RP_calculate(x,y,z) + print('roll=',roll) + print('pitch=',pitch) + time.sleep_ms(50)