Difference between revisions of "Hello World - Code"
From RoboWiki
					
										
					
					|  (Created page with "Return back to project page:  Hello World - Jakub Vojtek  Python code for the Hello World project: <syntaxhighlight lang=python>...") | m | ||
| Line 19: | Line 19: | ||
| last_direction = "" | last_direction = "" | ||
| + | running = True | ||
| def update_key_state(key, state): | def update_key_state(key, state): | ||
| Line 64: | Line 65: | ||
| def on_release(key): | def on_release(key): | ||
| + |     global running | ||
|      if key == kb.Key.esc: |      if key == kb.Key.esc: | ||
| + |         running = False | ||
|          return False |          return False | ||
| Line 78: | Line 81: | ||
| def check_reverse(): | def check_reverse(): | ||
|      distance = distanceSensor.get_distance() |      distance = distanceSensor.get_distance() | ||
| − |      if distance != -1 and distance < 200 and get_current_direction in ["down", "down_left", "down_right"]: | + |      if distance != -1 and distance < 200 and get_current_direction() in ["down", "down_left", "down_right"]: | 
|          wheels.stop() |          wheels.stop() | ||
|          print("Obstacle detected! Stopping the wheels.") |          print("Obstacle detected! Stopping the wheels.") | ||
| Line 90: | Line 93: | ||
|      listener.start() |      listener.start() | ||
| − | + |      while running: | |
| − |      while  | ||
|          current_direction = get_current_direction() |          current_direction = get_current_direction() | ||
|          check_reverse() |          check_reverse() | ||
| Line 118: | Line 120: | ||
|          time.sleep(0.1) |          time.sleep(0.1) | ||
| + | |||
| + |     listener.stop() | ||
| + |     wheels.stop() | ||
| + |     colorSensor.off() | ||
| + |     distanceSensor.off() | ||
| if __name__ == '__main__': | if __name__ == '__main__': | ||
|      main() |      main() | ||
| − | |||
| </syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 18:39, 9 June 2024
Return back to project page: Hello World - Jakub Vojtek
Python code for the Hello World project:
 
from buildhat import MotorPair, ColorSensor, DistanceSensor
from pynput import keyboard as kb
import time
wheels = MotorPair('A', 'B')
distanceSensor = DistanceSensor('C')
colorSensor = ColorSensor('D')
key_state = {
    "left": False,
    "right": False,
    "up": False,
    "down": False
}
last_direction = ""
running = True
def update_key_state(key, state):
    if key in key_state:
        key_state[key] = state
def get_current_direction():
    if key_state["up"]:
        if key_state["left"]:
            return "up_left"
        elif key_state["right"]:
            return "up_right"
        else:
            return "up"
    elif key_state["down"]:
        if key_state["left"]:
            return "down_left"
        elif key_state["right"]:
            return "down_right"
        else:
            return "down"
    elif key_state["left"]:
        return "left"
    elif key_state["right"]:
        return "right"
    else:
        return "none"
def on_press(key):
    try:
        if key == kb.Key.space:
            color = colorSensor.get_color()
            print(f"Detected color: {color}")
    except AttributeError:
        pass
    if key == kb.Key.left:
        update_key_state("left", True)
    elif key == kb.Key.right:
        update_key_state("right", True)
    elif key == kb.Key.up:
        update_key_state("up", True)
    elif key == kb.Key.down:
        update_key_state("down", True)
def on_release(key):
    global running
    if key == kb.Key.esc:
        running = False
        return False
    if key == kb.Key.left:
        update_key_state("left", False)
    elif key == kb.Key.right:
        update_key_state("right", False)
    elif key == kb.Key.up:
        update_key_state("up", False)
    elif key == kb.Key.down:
        update_key_state("down", False)
def check_reverse():
    distance = distanceSensor.get_distance()
    if distance != -1 and distance < 200 and get_current_direction() in ["down", "down_left", "down_right"]:
        wheels.stop()
        print("Obstacle detected! Stopping the wheels.")
    time.sleep(0.1)
def main():
    global last_direction
    print("Press arrow keys for movement and spacebar for color detection. Press 'esc' to exit.")
    listener = kb.Listener(on_press=on_press, on_release=on_release)
    listener.start()
    while running:
        current_direction = get_current_direction()
        check_reverse()
        if current_direction != last_direction:
            if current_direction == "up":
                wheels.start(-50, 50)
            elif current_direction == "down":
                wheels.start(50, -50)
            elif current_direction == "left":
                wheels.start(-20, -20)
            elif current_direction == "right":
                wheels.start(20, 20)
            elif current_direction == "up_left":
                wheels.start(-20, 50)
            elif current_direction == "up_right":
                wheels.start(-50, 20)
            elif current_direction == "down_left":
                wheels.start(20, -50)
            elif current_direction == "down_right":
                wheels.start(50, -20)
            elif current_direction == "none":
                wheels.stop()
            last_direction = current_direction
        time.sleep(0.1)
    listener.stop()
    wheels.stop()
    colorSensor.off()
    distanceSensor.off()
if __name__ == '__main__':
    main()
