Difference between revisions of "Programing Bot - Code"

From RoboWiki
Jump to: navigation, search
(Created page with "Return back to project page: Programing Bot - Fedor Agarshev Python code for the Spike Pong project: <syntaxhighlight lang=...")
 
Line 14: Line 14:
 
motor_pair.set_default_speed(50)
 
motor_pair.set_default_speed(50)
 
force_sensor = ForceSensor('F')
 
force_sensor = ForceSensor('F')
distance = DistanceSensor('C')
+
distance_sensor = DistanceSensor('C')
  
 
def some_button_pressed():
 
def some_button_pressed():
 
     return hub.left_button.is_pressed() or hub.right_button.is_pressed()
 
     return hub.left_button.is_pressed() or hub.right_button.is_pressed()
 +
 +
def show_image(image):
 +
    for y in range(0,len(image)):
 +
        for x in range(0,len(image[y])):
 +
            if image[y][x] == 1:
 +
                hub.light_matrix.set_pixel(x, y, 100)
 +
            else:
 +
                hub.light_matrix.set_pixel(x, y, 0)
 +
  
  
Line 48: Line 57:
 
     def execute(self):
 
     def execute(self):
 
         motor_pair.move(self.distance, 'cm', steering=0)
 
         motor_pair.move(self.distance, 'cm', steering=0)
 +
 +
class Moving_forward_up_the_wall:
 +
    def __init__(self):
 +
        image = [[1,1,1,1,1],
 +
                [0,0,1,0,0],
 +
                [0,1,1,1,0],
 +
                [1,0,1,0,1],
 +
                [0,0,1,0,0]]
 +
        show_image(image)
 +
        self.previous_order = None
 +
        self.next_order = None
 +
 +
    def set_variables(self):
 +
        pass
 +
 +
 +
    def set_previous_order(self, previous_order):
 +
        self.previous_order = previous_order
 +
 +
    def set_next_order(self, next_order):
 +
        self.next_order = next_order
 +
 +
    def get_next_order(self):
 +
        return self.next_order
 +
 +
    def execute(self):
 +
        motor_pair.start()
 +
        distance_sensor.wait_for_distance_closer_than(10, 'cm')
 +
        motor_pair.stop()
  
 
class Right_forward:
 
class Right_forward:
Line 82: Line 120:
 
         self.previous_order = None
 
         self.previous_order = None
 
         self.next_order = None
 
         self.next_order = None
 +
        self.angle = 0
  
 
     def set_variables(self):
 
     def set_variables(self):
Line 112: Line 151:
  
 
         #variables for target
 
         #variables for target
         self.target_color = 'black'
+
         self.target_color = 'red'
  
 
     def create_order(self, order):
 
     def create_order(self, order):
Line 146: Line 185:
 
             elif color == 'violet':
 
             elif color == 'violet':
 
                 self.create_order(Step_forward())
 
                 self.create_order(Step_forward())
 +
            elif color == 'yellow':
 +
                self.create_order(Moving_forward_up_the_wall())
 
             elif color == "red":
 
             elif color == "red":
 
                 hub.light_matrix.show_image('PACMAN')
 
                 hub.light_matrix.show_image('PACMAN')
Line 157: Line 198:
 
                         self.count -= 1
 
                         self.count -= 1
 
                         hub.light_matrix.write(self.count)
 
                         hub.light_matrix.write(self.count)
                     if self.check_target:
+
                     if self.check_target():
 
                         hub.light_matrix.write('Good job')
 
                         hub.light_matrix.write('Good job')
 
                         hub.speaker.beep(80, 0.5)
 
                         hub.speaker.beep(80, 0.5)
Line 167: Line 208:
 
game = Game()
 
game = Game()
 
game.play()
 
game.play()
 +
       
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 12:55, 1 May 2023

Return back to project page: Programing Bot - Fedor Agarshev

Python code for the Spike Pong project:

 
from spike import PrimeHub, LightMatrix, Button, StatusLight, ForceSensor, MotionSensor, Speaker, ColorSensor, App, DistanceSensor, Motor, MotorPair
from spike.control import wait_for_seconds, wait_until, Timer
import math

hub = PrimeHub()
hub.speaker.set_volume(50)
motor_pair = MotorPair('A', 'B')
color_sensor = ColorSensor('E')
motor_pair.set_default_speed(50)
force_sensor = ForceSensor('F')
distance_sensor = DistanceSensor('C')

def some_button_pressed():
    return hub.left_button.is_pressed() or hub.right_button.is_pressed()

def show_image(image):
    for y in range(0,len(image)):
        for x in range(0,len(image[y])):
            if image[y][x] == 1:
                hub.light_matrix.set_pixel(x, y, 100)
            else:
                hub.light_matrix.set_pixel(x, y, 0)



class Step_forward:
    def __init__(self):
        hub.light_matrix.show_image('ARROW_N')
        self.previous_order = None
        self.next_order = None
        self.distance = 0

    def set_variables(self):
        force_sensor.wait_until_pressed()
        while force_sensor.is_pressed():
            self.distance += 1
            hub.speaker.beep(70, 0.2)
        hub.speaker.beep(60, 0.5)
        hub.speaker.beep(67, 0.5)
        hub.speaker.beep(60, 0.5)


    def set_previous_order(self, previous_order):
        self.previous_order = previous_order
    
    def set_next_order(self, next_order):
        self.next_order = next_order

    def get_next_order(self):
        return self.next_order

    def execute(self):
        motor_pair.move(self.distance, 'cm', steering=0)

class Moving_forward_up_the_wall:
    def __init__(self):
        image = [[1,1,1,1,1],
                 [0,0,1,0,0],
                 [0,1,1,1,0],
                 [1,0,1,0,1],
                 [0,0,1,0,0]]
        show_image(image)
        self.previous_order = None
        self.next_order = None

    def set_variables(self):
        pass


    def set_previous_order(self, previous_order):
        self.previous_order = previous_order

    def set_next_order(self, next_order):
        self.next_order = next_order

    def get_next_order(self):
        return self.next_order

    def execute(self):
        motor_pair.start()
        distance_sensor.wait_for_distance_closer_than(10, 'cm')
        motor_pair.stop()

class Right_forward:
    def __init__(self):
        hub.light_matrix.show_image('ARROW_E')
        self.previous_order = None
        self.next_order = None
        self.angle = 0
    
    def set_variables(self):
        force_sensor.wait_until_pressed()
        while force_sensor.is_pressed():
            self.angle += 0.5               # 90 degrees is about 10 units
            hub.speaker.beep(70, 0.2)
        hub.speaker.beep(60, 0.5)
        hub.speaker.beep(67, 0.5)
        hub.speaker.beep(60, 0.5)

    def set_previous_order(self, previous_order):
        self.previous_order = previous_order

    def set_next_order(self, next_order):
        self.next_order = next_order
    
    def get_next_order(self):
        return self.next_order

    def execute(self):
        motor_pair.move(self.angle, 'cm', steering=100)

class Left_forward:
    def __init__(self):
        hub.light_matrix.show_image('ARROW_W')
        self.previous_order = None
        self.next_order = None
        self.angle = 0

    def set_variables(self):
        force_sensor.wait_until_pressed()
        while force_sensor.is_pressed():
            self.angle += 0.5            # 90 degrees is about 10 units
            hub.speaker.beep(70, 0.2)
        hub.speaker.beep(60, 0.5)
        hub.speaker.beep(67, 0.5)
        hub.speaker.beep(60, 0.5)

    def set_previous_order(self, previous_order):
        self.previous_order = previous_order

    def set_next_order(self, next_order):
        self.next_order = next_order
    
    def get_next_order(self):
        return self.next_order

    def execute(self):
        motor_pair.move(self.angle, 'cm', steering=-100)


class Game:
    def __init__(self):
        self.count = 0
        self.first_order = None
        self.current_order = None

        #variables for target
        self.target_color = 'red'

    def create_order(self, order):
        wait_until(some_button_pressed)
        if hub.left_button.is_pressed():
            return
        order.set_variables()
        if self.first_order == None:
            self.first_order = order
            self.current_order = order
        else:
            order.set_previous_order(self.current_order)
            self.current_order.set_next_order(order)
            self.current_order = order
        self.count += 1

    def check_target(self):
        # Conditions for completing the task
        #    You can change them however you want.
        if color_sensor.get_color() == self.target_color:
            return True
        return False

    def play(self):
        hub.light_matrix.write(self.count)
        while True:
            color_sensor.wait_for_new_color()
            color = color_sensor.get_color()
            if color == 'green':
                self.create_order(Left_forward())
            elif color == 'blue':
                self.create_order(Right_forward())
            elif color == 'violet':
                self.create_order(Step_forward())
            elif color == 'yellow':
                self.create_order(Moving_forward_up_the_wall())
            elif color == "red":
                hub.light_matrix.show_image('PACMAN')
                wait_until(some_button_pressed)
                if hub.left_button.is_pressed():
                    pass
                else:
                    while self.first_order != None:
                        self.first_order.execute()
                        self.first_order = self.first_order.get_next_order()
                        self.count -= 1
                        hub.light_matrix.write(self.count)
                    if self.check_target():
                        hub.light_matrix.write('Good job')
                        hub.speaker.beep(80, 0.5)
                        hub.speaker.beep(87, 0.5)
                        hub.speaker.beep(80, 0.5)

            hub.light_matrix.write(self.count)

game = Game()
game.play()