# Programa para experimentar el uso del JoyStick KN-023 y 5 leds
# Módulos a trabajar
from machine import Pin, I2C
import ssd1306
from machine import Pin, ADC #, PWM
import utime
from time import sleep
# -------PANTALLA  OLED ---------
# ESP32 Pin assignment 
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, SPick !', 10, 25)      
oled.show()
utime.sleep_ms(3000)
oled.fill(0)
oled.show()
# -------PANTALLA  JOYSTICK Y LEDS ---------
# Definición de pines del ESP32 para las señales de entrada
sw = ADC(Pin(34))  # Pulsador digital
vrx = ADC(Pin(35))  # Señal analógica en x
vry = ADC(Pin(33))  # Señal analógica en y
# Definición de pines del ESP32 
pinLedRojo = 5
pinLedVerde = 4
pinLedAzul = 23
pinLedMorado = 22
pinLedAmarillo = 2
pinBuzzer = 15
# Definición de pines del ESP32 para las señales de salida a leds
LedCentroVerde = Pin(pinLedVerde, Pin.OUT)
LedDerechaAzul = Pin(pinLedAzul, Pin.OUT)
LedArribaMorado = Pin(pinLedMorado, Pin.OUT)
LedIzquierdaAmarillo = Pin(pinLedAmarillo, Pin.OUT)
LedAbajoRojo = Pin(pinLedRojo, Pin.OUT)
Buzzer = Pin(pinBuzzer,Pin.OUT) 
# Apaga todos los leds
LedCentroVerde.value(0)
LedDerechaAzul.value(0)
LedArribaMorado.value(0)
LedIzquierdaAmarillo.value(0)
LedAbajoRojo.value(0)
# Atenuación del voltaje de la ESP32 a 3.3V
vrx.atten(ADC.ATTN_11DB);
vry.atten(ADC.ATTN_11DB);
# Resolución a 1024
vrx.width(ADC.WIDTH_10BIT)
vry.width(ADC.WIDTH_10BIT)
# Ciclo de operación
while True:
    valorx = vrx.read() # Lee el valor en x de 0 a 1023
    valory = vry.read() # Lee el valor en y de 0 a 1023
    valorsw = sw.read() # Lee el valor del pulsador digital 
    if valory >= 1000:
        print("Disminuye Cantidad: ")
        oled.text("Disminuye", 35, 15) 
        oled.text("Cantidad", 31, 35) 
        oled.show()
        LedIzquierdaAmarillo.value(1)
        utime.sleep_ms(200)
        oled.fill(0)
        oled.show()
        LedIzquierdaAmarillo.value(0)
    if valory <= 23:
        print("Aumenta Cantidad: ")
        oled.text("Aumenta", 35, 15) 
        oled.text("Cantidad", 31, 35) 
        oled.show()
        LedDerechaAzul.value(1)
        utime.sleep_ms(200)
        LedDerechaAzul.value(0)
        oled.fill(0)
        oled.show()
    if valorx <= 23:
        print("Solicita Reabasto: ")
        oled.text("Solicita", 35, 15) 
        oled.text("Reabasto", 31, 35)           
        oled.show()
        LedArribaMorado.value(1)
        utime.sleep_ms(200)
        LedArribaMorado.value(0)
        oled.fill(0)
        oled.show()
    if valorx >= 1000:
        print("Surtido Nulo: ")
        oled.text("Surtido Nulo", 15, 25)   
        oled.show()
        LedAbajoRojo.value(1)
        utime.sleep_ms(200)
        LedAbajoRojo.value(0)
        oled.fill(0)
        oled.show()
    if valorsw == 0:
        print("Surtido Completo: ")
        oled.text("Surtido", 35, 15)   
        oled.text("Completo", 31, 35)   
        oled.show()
        LedCentroVerde.value(1)
        Buzzer.value(1)
        utime.sleep_ms(500)
        oled.fill(0)
        oled.show()
        LedCentroVerde.value(0)
        Buzzer.value(0)
        utime.sleep_ms(50)