#imports
from machine import Pin, SoftI2C
from buzzer import Buzzer
import oled
from accl import accel
from stepper import Stepper
from ultrasonic import HCSR04
from time import sleep
import time
#variables
led = Pin(12,Pin.OUT)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
screen= oled.I2C(128,64,i2c)
button = Pin(27,Pin.IN,Pin.PULL_UP)
ultra_sensor= HCSR04(5,18)
buzz = Buzzer(15)
data = button.value()
last_interrupt_time = 0
debounce_ms = 50
stepper_1 = Stepper(13)
stepper_2 = Stepper(19)
device=accel(i2c)
#functions
#oled first display
def first_oled_display():
led.value(0)
screen.clear()
screen.text("press button to ",10,2)
screen.text("start",10,3)
screen.show()
#block func
def wait_button_pressed():
global data
while data!=0:
data =button.value()
else:
pass
#calculating steps
#distance x (200/6 x 3.14)=10.6 * distance
def get_steps_from_distance():
global no
dis=ultra_sensor.distance_cm()
no=int(dis*10.6)
return no
return dis
def robot():
sleep(0.5)
dis = get_steps_from_distance()
screen.clear()
screen.text(str(dis/10.6)+" Cm", 10, 2)
screen.show()
for x in range(no):
values = device.get_values()
#y stands for y axis
Y = values["AcY"]
if Y not in range(-12001,12000):
led.value(1)
for z in range(3):
buzz.beep_once()
sleep(0.1)
led.value(0)
screen.clear()
screen.text("tilted",10,2)
screen.show()
sleep(1)
first_oled_display()
wait_button_pressed()
elif x == no-1:
buzz.beep_once()
screen.clear()
screen.text("reached",10,2)
screen.show()
sleep(1)
first_oled_display()
wait_button_pressed()
else:
stepper_1.move_one_step()
stepper_2.move_one_step()
first_oled_display()
wait_button_pressed()
led.value(1)
buzz.beep_once()
sleep(0.5)
led.value(0)
robot()
#inturupt func
def butt_handler(pin):
global last_interrupt_time
global no
global dis
global Y
current_time = time.ticks_ms()
if (current_time - last_interrupt_time) > debounce_ms:
if pin.value() == 0:
led.value(1)
buzz.beep_once()
sleep(0.5)
led.value(0)
robot()
last_interrupt_time = current_time
# Set up interrupt on falling and rising edge (button press)
button.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler=butt_handler)