# L7a- Program vizualizare date sensor ADXL345 conectat prin # protocol I2C # SDA -pin 1 (GP0) # SCL -pin 2 (GP1) from machine import Pin, I2C import time import ustruct # ustruct este simila cu struct si permite serializarea si deserializarea # datelor intr-un/dintr-un sir binar # Registre interne ADXL345 ADXL345_ADDRESS = 0x53 # adresa I2C ADXL345_POWER_CTL = 0x2D # address for power control #D5=link, D4=autosleep,D3=Measure, D2=Sleep, D1D0=wakeup ADXL345_DATA_FORMAT = 0x31 # configure format data # D1D0=range ADXL345_DATAX0 = 0x32 # adresa start data :32 33 34 35 36 37 # Constructor I2C #i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) i2c = I2C(0, sda=Pin(0), scl=Pin(1)) # Initialize ADXL345 def init_adxl345(): #i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_POWER_CTL, bytearray([0x08])) i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_POWER_CTL, b'\x08') # Measure=1 i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_DATA_FORMAT, b'\x08') #FULL_RES=1 -rezolutie maxima # Read acceleration data def read_accel_data(): data = i2c.readfrom_mem(ADXL345_ADDRESS, ADXL345_DATAX0, 6) x, y, z = ustruct.unpack('<3h', data) # extrage 3 intregi # < semnifica litle-endian , octetul LSB este primul # 3h specifica 3 valori de tip intreg return x, y, z init_adxl345() while True: x, y, z = read_accel_data() # lectura date sensor print(x, y, z) # afisare date # print("X: {}, Y: {}, Z: {}".format(x*0.0039, y*0.0039, z*0.0039)) time.sleep(1) # if you do get OSError: [Errno 5] EIO, try unplug and plug # if you do set different resolution 0.0039 may not be the constant (check data sheet)