# Programa para mostrar diferentes comandos en el display oled SSD1306.
# El display utiliza el I2C Bus 0, uno de los dos buses I2C disponibles.
# El programa solo escribe en el display.
# El display se conecta de acuerdo al siguiente orden de terminales:
# - Terminal de tierra en el display a la terminal 38 del Pico, correspondiente a tierra.
# - Terminal de alimentación en el display a la terminal 36 del Pico, correspondiente a 3.3V.
# - Terminal SCL en el display a la terminal 27 del Pico, correspondiente al GPIO21.
# - Terminal SDA en el display a la terminal 26 del Pico, correspondiente al GPIO20.
# El programa inicia importando las librerías de control de terminales y de temporizacion.
# Crea variables para el manejo de terminales del display.
# Define la forma de operación de la interfaz I2C.
# Importa la librería de control del SSD1306 y define las características del display.
# Esta libreria se descarga de PyPi (https://pypi.org/).
import machine
import utime
sda=machine.Pin(20)
scl=machine.Pin(21)
i2c=machine.I2C(0, sda=sda, scl=scl, freq=400000)
from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 64, i2c)
import math
while True:
for anguloGrados in range(360, 0, -5): # Ángulo de giro de la línea del eje (de 0º a 360º en intervalos de 5º)
anguloRadianes = (math.pi*anguloGrados)/180 # Ángulo de giro de la línea del eje en radianes
xLinea = int(math.cos(anguloRadianes)*24) # Coordenada x línea del eje
yLinea = int(math.sin(anguloRadianes)*24) # Coordenada y línea del eje
# Circunferencia. Radio 25 pixels. Centro (24, 32)
for anguloGrados in range(360, 0, -5): # Ángulo de giro de cada pixel de la circunferencia en grados
anguloRadianes = (math.pi*anguloGrados)/180 # Ángulo de giro de cada pixel de la circunferencia en radianes
x = int(math.cos(anguloRadianes)*24) # Coordenada x pixel circunferencia
y = int(math.sin(anguloRadianes)*24) # Coordenada y pixel circunferencia
oled.pixel(x+24, y+32, 1) # Dibuja cada pixel de la circunferencia
# oled.hline(0, 32, 128, 1) # Dibuja la línea horizontal central
# oled.vline(49, 0, 64, 1) # Dibuja la línea vertical
oled.line(24 , 32, xLinea+24, yLinea+32, 1) # Dibuja la línea del eje. De (24, 32) a (xLinea, yLinea)
oled.hline(xLinea+24, yLinea+32, 27-xLinea,1) # Dibuja la línea horizontal giro
oled.show() # Muestra el resultado
oled.scroll(1, 0) # Desplaza imagen un pixel a la derecha
oled.fill_rect(0, 0, 51, 64, 0) # Tapa desde origen hasta raya vertical...
oled.show() # ...toda la altura de la pantalla