print("Hello, ESP32!")

#import all necessary modules/libraries
import hcsr04 #Sensor Library
import ssd1306 #OLED Library
from utime import sleep
from machine import SoftI2C, Pin, PWM

#declare ultrasonic pin connection
#create object call ultrasonic sensir using OOP (Object Oriented Programming)
#OOP format is > library name.class name (trigger_pin, echo_pin, echo_timeout_us=500*2*30)
ultrasonic_sensor = hcsr04.HCSR04(trigger_pin=12, echo_pin=14, echo_timeout_us=500*2*30)

#PIN Declaration on LED
i2c_oleddisplay = SoftI2C(scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64

#Use OOP to create project
# Remark: Objectformat > library name.class name
# (Width, Height, i2c)
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c_oleddisplay)

#Declare Buzzer Pin
buzzer = PWM(Pin(4), Pin.OUT)

while True:

    #let's test the sensor
    object_detect_cm = ultrasonic_sensor.distance_cm()
    object_detect_mm = ultrasonic_sensor.distance_mm()

    #display object distance on Serial Monitor
    print("Distance from an object in cm :", object_detect_cm) #Use this if u want decimal point value
    print("Distance from an object in mm :", object_detect_mm) #Use this if u want whole number/value
    print("---------------------------------------------------\n")

    #Display object on OLED Screen
    oled.fill(0)
    oled.text('Object Detected:', 0, 0, 1)
    oled.text(str(object_detect_cm), 0, 20, 1)
    oled.text('mm', 70,20,1)
    oled.text(str(object_detect_mm), 0, 40, 1)

    oled.show()

    if object_detect_cm > 150:
        buzzer.init(freq=1, duty=0)
    else:
        for i in range (5):
            buzzer.init(freq=1000, duty=512)
            sleep(0.5)
            buzzer.init(freq=1, duty=0)
            sleep(0.5)


    sleep(5)
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
bz1:1
bz1:2