from machine import Pin, I2C, PWM, ADC
from time import sleep
import ssd1306


def RevisarLuz(EstadoLuz):
    if EstadoLuz == 1:
      display.text('LUZ: ON', 0,10)
      display.show()
      led.value(1)
    else:
      display.text('Luz: OFF', 0,10)
      display.show()
      led.value(0)


def RevisarSistema(EstadoAlarma, StateLuz):

    display.fill(0)   
    display.show()
    if  EstadoAlarma == 1:
      RevisarLuz(StateLuz)

      display.text('Alarma: ON', 0,0)
      display.show()
      #activar alarma
      buzzer.init(freq=1047, duty=512)
      #Cuanto timepo se activará la alarma
      sleep(5)
      #apagar alarma
      buzzer.init(freq=1047, duty=0)

    display.fill(0)   
    display.show()

    RevisarLuz(StateLuz)
    display.text('Alarma: OFF', 0,0)
    display.show()


#datos de la fotorresistencia
pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB)
#datos led
led = Pin(4, Pin.OUT)
#datos del display
i2c=I2C(0, scl=Pin(15), sda=Pin(2))
#tamaño que tiene la pantalla OLED
ancho=128
alto=64
display=ssd1306.SSD1306_I2C(ancho, alto, i2c)
# estado predefinido de la alarma en la pantalla OLED
display.text('Alarma: OFF', 0,0)
display.show()
display.text('Luz: OFF', 0,10)
display.show()
#recibir datos del sensor de movimiento 
PIR = Pin(12, Pin.IN, Pin.PULL_UP)
#datos del buzzer
buzzer = PWM(Pin(13,Pin.OUT))
#buzzer apagado
buzzer.init(freq=1047, duty=0)

while True:
  Valor_PIR = PIR.value()
  #si se descomenta la line 28 (la función print) se mostrará en la consola
  #el valor lógico que se obtiene de lsensor de movimiento el cual, al ser
  #lógico, solo puede ser 0(si no hay movimiento) y 1(si hay movimiento)
  #print(PIR.value())

  #obtener valor
  pot_value = pot.read()
  #calculos para cambiar valor a luxes
  volt = pot_value/4095*3.3
  res = 2000*volt/(1-volt/3.3)
  luxes = pow(33*1000*pow(10,0.7)/res, (1/0.7))
  #prender y apagar las luces dependiendo de si está oscuro o no
  print(luxes)

  if luxes<100 and Valor_PIR == 1:
    RevisarSistema(1,1)
  elif luxes<100 and Valor_PIR == 0:
    RevisarSistema(0,1)
  elif luxes>=100 and Valor_PIR == 1:
    RevisarSistema(1,0)
  else:
    RevisarSistema(0,0)
  sleep(2)