Difference between revisions of "Programing Bot - Code"
From RoboWiki
(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_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 = ' | + | 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()