print("This device will detect chicken back to their home")
print("4/12/2023")
print("created by ZUNIE")

# main.py
from machine import Pin, SoftI2C, PWM
from utime import sleep
import SERVOLLLL
import OLEDLIBRARY

Pin_scl_sda = SoftI2C(scl=Pin(22), sda=Pin(21))

# Define GPIO pins
Servo_Pin = 26  # Use the pin number directly, not Pin object
Servo2_Pin = 27  # Use the pin number directly, not Pin object
warning_led_pin = Pin(13, Pin.OUT)
car_led_pin = Pin(12, Pin.OUT)
train_led_pin = Pin(14, Pin.OUT)
motion_sensor_pin = Pin(25, Pin.IN)
buzzer_pin = PWM(Pin(33), freq=1000)

# CREATE OBJECT NAMES
skrin = OLEDLIBRARY.SSD1306_I2C(width=128, height=64, i2c=Pin_scl_sda)
blade = SERVOLLLL.Servo(pin=Servo_Pin)
blade2 = SERVOLLLL.Servo(pin=Servo2_Pin)

while True:
    # Train road
    warning_led_pin.on()
    car_led_pin.off()
    train_led_pin.on()
    blade2.move(90)
    blade.move(90)
    skrin.fill(1)  # 0 - for BLACK, 1 for WHITE
    skrin.text("Train Road Open", 0, 10, 0)
    skrin.text("Car Road closed", 0, 30, 0)
    skrin.show()  # a must !!
    sleep(2)  # Adjust the time as needed

    # Car road
    warning_led_pin.on()
    car_led_pin.on()
    train_led_pin.off()
    blade.move(0)
    blade2.move(0)
    skrin.fill(1)  # 0 - for BLACK, 1 for WHITE
    skrin.text("Car Road Open", 0, 10, 0)
    skrin.text("Train Road Closing", 0, 30, 0)
    skrin.show()  # a must !!
    sleep(2)  # Adjust the time as needed

    # Blink train LED and lower train barrier
    for _ in range(3):  # Blink three times
        warning_led_pin.on()
        sleep(1)
        warning_led_pin.off()
        sleep(1)
        car_led_pin.on()
        train_led_pin.off()
        blade.move(0)
        blade2.move(0)
        skrin.fill(1)  # 0 - for BLACK, 1 for WHITE
        skrin.text("Train Road will be Closing", 0, 10, 0)
        skrin.text("Car Road will be Open", 0, 30, 0)
        skrin.show()
        sleep(2)

    # Blink car LED and lower car barrier
    for _ in range(3):  # Blink three times
        warning_led_pin.on()
        sleep(1)
        warning_led_pin.off()
        sleep(1)
        car_led_pin.off()
        train_led_pin.on()
        blade.move(90)
        blade2.move(90)
        skrin.fill(1)  # 0 - for BLACK, 1 for WHITE
        skrin.text("Car Road will be Closing", 0, 10, 0)
        skrin.text("Train Road will be Open", 0, 30, 0)
        skrin.show()
        sleep(2)
    # Check motion sensor
    if motion_sensor_pin.value() == 1:
        # Motion detected, sound the buzzer
        buzzer_pin.duty(50)  # Adjust duty cycle for desired volume
        sleep(0.2)  # Adjust the time the buzzer sounds
        buzzer_pin.duty(0)

    sleep(2)  # Adjust the time as needed