from machine import Pin, SoftI2C, sleep
import ssd1306
import MPU6050
import time
#Se establecen los pines para la LCD OLED
i2c = SoftI2C(scl = Pin(22), sda = Pin(21))
#Inicializamos los pines de los led para luego poder usarlos
leds = [16, 4, 0, 2, 15, 25, 26, 27, 14, 12]
for pin in leds:
Pin(pin, Pin.OUT)
#Se establece el rango que medirán los leds, que será de [-250 250]
def led(numero):
for pin in leds:
Pin(pin, Pin.OUT).value(0)
if -250 <= numero <= 250 and numero != 0:
rango = int((numero +250) // 50)
Pin(leds[rango], Pin.OUT).value(1)
#para obtener comunicación del giroscopio y con la LCD
aceleracion = MPU6050.accel(i2c)
pantalla = ssd1306.SSD1306_I2C(128, 64, i2c)
#Se establecen los tamaños de texto en la pantalla
def ans(texto):
pantalla.fill(0)
font_size = 8
lines_per_screen = 8
lineas = [texto[i:i + 15] for i in range(0, len(texto), 15)]
for i, linea in enumerate(lineas[:lines_per_screen]):
pantalla.text(linea, 0, i * font_size)
pantalla.show()
#Se leen los valores del giroscopio
while True:
leer = (aceleracion.get_values())
xGiro = leer["GyX"]
yGiro = leer["GyY"]
zGiro = leer["GyZ"]
girox = round(xGiro * 250 /32767, 2)
giroy = round(yGiro * 250 /32767, 2)
giroz = round(zGiro * 250 /32767, 2)
#Para poder prender el led correcto
led(girox)
xAcel = leer["AcX"]
acelx = round(xAcel * 2/ 32767, 2)
#Para imprimir los datos obtenidos en la LCD OLED
LCD = "La inclinacion en [X,Y,Z] es: [{:.2f},{:.2f},{:.2f}],la acelaricion en X es: {:.2f}".format(girox, giroy, giroz, acelx)
ans(LCD)
sleep(10)