print('\nProgram: Automatic Door System')
print('by Muhammad Raziq Afiq B Ramlan L03')
print('7/12/2023 \n')

#Import all necessary libraries
from machine import Pin, SoftI2C, PWM
from utime import sleep
import SSD1306 #OLED Library
import library_servo #SERVO Library
import dht #Sensor DHT22

#Pin declaration
led_red = Pin(2, Pin.OUT)
led_green = Pin(15, Pin.OUT)
buzzer = PWM(Pin(13), Pin.OUT)
sensor = dht.DHT22(Pin(33))
motor = PWM(Pin(25, Pin.OUT))
motor.freq(50) 

oled = SoftI2C(scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = SSD1306.SSD1306_I2C(width=oled_width, height=oled_height, i2c=oled) #library name.class name()

#Parameter declaration
counter = 1

#Main Program
while True:
  sensor.measure()
  temp = sensor.temperature()
  hum = sensor.humidity()
  print('Session', counter)
  counter =  counter+1
  print("Temperature: %3.1f C" %temp)
  print("Humidity: %3.1f %%" %hum)

#Celcius above 16°C
  if temp > 16:
    led_red.on()
    motor.duty(115)
    oled.fill(0) 
    oled.text('Temperature High', 01, 10)
    oled.text('Door Close', 18, 38)
    oled.show()
    sleep(3)

    oled.fill(0)
    oled.text("Temperature:", 15, 0)
    oled.text(str(temp), 45, 15)
    oled.text("Humidity:", 25, 30)
    oled.text(str(hum), 45, 45)
    oled.show()

    print("Door is Close")
    print("Temperature still high \n")
          
#Humidity below 50%
  elif hum < 50:
    led_red.on()
    motor.duty(115)
    oled.fill(0)
    oled.text('Humidity low', 01, 10)
    oled.text('Door Close', 18, 38)
    oled.show()
    sleep(3)

    oled.fill(0)
    oled.text("Temperature:", 15, 0)
    oled.text(str(temp), 45, 15)
    oled.text("Humidity:", 25, 30)
    oled.text(str(hum), 45, 45)
    oled.show()

    print("Door is close")
    print("Humidity still low \n")

#Scenario wheres the owner can enter room
  else:
    led_red.off()
    motor.duty(40)
    oled.fill(0)
    oled.show()
    oled.text('Temperature low', 01, 10)
    oled.text('Come Enter', 18, 38)
    oled.show()
    sleep(2)

    oled.fill(0)
    oled.show()
    oled.text("Temperature:", 15, 0)
    oled.text(str(temp), 45, 15)
    oled.text("Humidity:", 25, 30)
    oled.text(str(hum), 45, 45)
    oled.show()

    print("Temperature already low")
    print("Come enter my room \n")

    for (i) in range (10): #Counting 10 times
        led_green.on()
        sleep(0.3)
        buzzer.init(freq=800, duty=400)
        sleep(0.3)
        led_green.off()
        sleep(0.3)
        buzzer.init(freq=1, duty=0)
        sleep(0.3)
    break
  sleep(3)