#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile
from time import sleep
import random
# Variables/Definitions
ev3 = EV3Brick()
#Definerer motor kontroller.
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)
#Definerer Inputs fra eksterne sensorer, og knapper. Port 1 og 2.
button = TouchSensor(Port.S1)
distanceSensor = UltrasonicSensor(Port.S2)
#Definerer DriveBase
robot = DriveBase(left_motor, right_motor, wheel_diameter = 56, axle_track=111)
robot.settings(straight_speed = 70, turn_rate = 150)
ev3.speaker.set_volume(50)
#Startvariablen, som gjør at koden vet om den skal kjøre eller vente. Boolean verdi.
running = False
# Start up
ev3.speaker.say("Bernt is AWAKE!")
ev3.screen.print("Bernt is Ready for Action!")
sleep(1)
# Gjør slik at loopen kjører mens programmet er aktivt. Ellers stopper den etter en kjøring.
while True:
# Button pressed gjør slik at programmet starter og stopper, boolean verdi.
if button.pressed():
running = not running #Inverterer verdien fra linje 26, og gjør den true.
sleep(0.5) # debounce
while running: #Hoved loop, benytter while istedenfor if.
#While er mer praktisk i disse situasjonene, hvor den skal kjøre til den blir stoppet av en sensor eller lignende.
ev3.screen.clear()
ev3.screen.print("Excercise 2")
while running or distanceSensor.distance() :
robot.drive(150, 0) #Kjører med spesifik fart
if distanceSensor.distance() < 100: #Hvis avstand er mindre enn gitt mm, gjør
robot.stop() #Stanser motorene, og bremser.
sleep(0.5)
angle = random.randint(-180,180) #Definerer "pathfinding" vinkler
robot.turn(angle) #Snur roboten
continue # Fortsetter loopen
if button.pressed():
running = not running #inverterer verdien til false
robot.stop()
ev3.speaker.say("Excercise done") #Høytaller funksjon
sleep(2) #debounce