class El3ctricGuitar: NOTES = [1318, 1174, 987, 880, 783, 659, 587, 493, 440, 392, 329, 293] N_NOTES = len(NOTES) def __init__( self, lever_motor_port: str = OUTPUT_D, touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4): self.lever_motor = MediumMotor(address=lever_motor_port) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.ir_sensor = InfraredSensor(address=ir_sensor_port) self.leds = Leds() self.speaker = Sound() def start_up(self): self.leds.animate_flash( color='ORANGE', groups=('LEFT', 'RIGHT'), sleeptime=0.5, duration=3, block=True) self.lever_motor.on_for_seconds( speed=5, seconds=1, brake=False, block=True) self.lever_motor.on_for_degrees( speed=-5, degrees=30, brake=True, block=True) sleep(0.1) self.lever_motor.reset() def play_music(self): if self.touch_sensor.is_released: raw = sum(self.ir_sensor.proximity for _ in range(4)) / 4 self.speaker.tone( self.NOTES[min(round(raw / 5), self.N_NOTES - 1)] - 11 * self.lever_motor.position, 100, play_type=Sound.PLAY_WAIT_FOR_COMPLETE) def main(self): self.start_up() while True: self.play_music()
sensor_thread = SensorThread(name="sensor_thread") sensor_thread.daemon = True sensor_thread.start() # Main program loop while running: console.reset_console() leds.all_off() state = "reset" reset_sensors_and_variables() calibrate_gyro_offset() sound.play_file("/home/robot/sounds/Speed up.wav") console.reset_console() leds.animate_flash('GREEN', duration=None, block=False) state = "ready" log.debug("Starting control loop") while ok == True: time = get_time() calculate_control_loop_period() calculate_robot_body_angle_and_speed() calculate_wheel_angle_and_speed() calculate_output_power() drive_motors() check_if_robot_fell_down() state = "fell_over"
seconds=1, brake=True, block=True) sleep(2) MEDIUM_MOTOR.on_for_seconds( speed=-100, seconds=1, brake=True, block=True) sleep(1) else: LIGHTS.animate_flash( color=Leds.ORANGE, groups=(Leds.LEFT, Leds.RIGHT), block=False) TAIL_MOTOR.on( speed=100, brake=False, block=False) MEDIUM_MOTOR.on_for_seconds( speed=randint(-30, 30), seconds=0.2, brake=False, block=True)
class MindstormsGadget(AlexaGadget): def __init__(self): super().__init__(gadget_config_path='./auth.ini') # order queue self.queue = Queue() self.button = Button() self.leds = Leds() self.sound = Sound() self.console = Console() self.console.set_font("Lat15-TerminusBold16.psf.gz", True) self.dispense_motor = LargeMotor(OUTPUT_A) self.pump_motor = LargeMotor(OUTPUT_B) self.touch_sensor = TouchSensor(INPUT_1) # Start threads threading.Thread(target=self._handle_queue, daemon=True).start() threading.Thread(target=self._test, daemon=True).start() def on_connected(self, device_addr): self.leds.animate_rainbow(duration=3, block=False) self.sound.play_song((('C4', 'e3'), ('C5', 'e3'))) def on_disconnected(self, device_addr): self.leds.animate_police_lights('RED', 'ORANGE', duration=3, block=False) self.leds.set_color("LEFT", "BLACK") self.leds.set_color("RIGHT", "BLACK") self.sound.play_song((('C5', 'e3'), ('C4', 'e3'))) def _test(self): while 1: self.button.wait_for_pressed('up') order = { 'name': 'Test', 'tea': 'Jasmine', 'sugar': 100, 'ice': 100 } self.queue.put(order) sleep(1) def _handle_queue(self): while 1: if self.queue.empty(): continue order = self.queue.get() self._make(name=order['name'], tea=order['tea'], sugar=order['sugar'], ice=order['ice']) def _send_event(self, name, payload): self.send_custom_event('Custom.Mindstorms.Gadget', name, payload) def _affirm_receive(self): self.leds.animate_flash('GREEN', sleeptime=0.25, duration=0.5, block=False) self.sound.play_song((('C3', 'e3'), ('C3', 'e3'))) def on_custom_mindstorms_gadget_control(self, directive): try: payload = json.loads(directive.payload.decode("utf-8")) print("Control payload: {}".format(payload), file=sys.stderr) control_type = payload["type"] # regular voice commands if control_type == "automatic": self._affirm_receive() order = { "name": payload["name"] or "Anonymous", "tea": payload["tea"] or "Jasmine Milk Tea", "sugar": payload["sugar"] or 100, "ice": payload["ice"] or 100, } self.queue.put(order) # series of voice commands elif control_type == "manual": # Expected params: [command] control_command = payload["command"] if control_command == "dispense": self._affirm_receive() if payload['num']: self._dispense(payload['num']) else: self._dispense() elif control_command == "pour": self._affirm_receive() if payload['num']: self._pour(payload['num']) else: self._pour() except KeyError: print("Missing expected parameters: {}".format(directive), file=sys.stderr) def _make(self, name=None, tea="Jasmine Milk Tea", sugar=100, ice=100): if not self.touch_sensor.is_pressed: # cup is not in place self._send_event('CUP', None) self.touch_sensor.wait_for_pressed() sleep(3) # cup enter delay # mid_col = console.columns // 2 # mid_row = console.rows // 2 # mid_col = 1 # mid_row = 1 # alignment = "L" process = self.sound.play_file('mega.wav', 100, Sound.PLAY_NO_WAIT_FOR_COMPLETE) # dispense boba self._dispense() # dispense liquid self._pour(tea=tea) # self.console.text_at( # s, column=mid_col, row=mid_row, alignment=alignment, reset_console=True # ) # notify alexa that drink is finished payload = { "name": name, "tea": tea, "sugar": sugar, "ice": ice, } self._send_event("DONE", payload) process.kill() # kill song self.sound.play_song((('C4', 'q'), ('C4', 'q'), ('C4', 'q')), delay=0.1) self.touch_sensor.wait_for_released() # dispense liquid def _pour(self, time_in_s=10, tea="Jasmine Milk Tea"): # send event to alexa payload = {"time_in_s": time_in_s, "tea": tea} self._send_event("POUR", payload) self.pump_motor.run_forever(speed_sp=1000) sleep(time_in_s) self.pump_motor.stop() # dispense boba def _dispense(self, cycles=10): # send event to alexa payload = {"cycles": cycles} self._send_event("DISPENSE", payload) # ensure the dispenser resets to the correct position everytime if cycles % 2: cycles += 1 # agitate the boba to make it fall for i in range(cycles): deg = 45 if i % 2 else -45 self.dispense_motor.on_for_degrees(SpeedPercent(75), deg) sleep(0.5)
from ev3dev2.display import Display from ev3dev2.led import Leds from time import sleep SCREEN = Display() LEDS = Leds() SCREEN.image_filename( filename='/home/robot/image/Hurt.bmp', clear_screen=True) SCREEN.update() sleep(0.5) SCREEN.image_filename( filename='/home/robot/image/Neutral.bmp', clear_screen=True) SCREEN.update() LEDS.animate_flash( color=Leds.RED, groups=(Leds.LEFT, Leds.RIGHT), sleeptime=0.5, duration=5, block=True)
#!/usr/bin/env micropython from ev3dev2.sensor.lego import InfraredSensor from ev3dev2.sensor import INPUT_4 from ev3dev2.led import Leds IR_SENSOR = InfraredSensor(address=INPUT_4) LEDS = Leds() while IR_SENSOR.proximity >= 30: pass LEDS.animate_flash( color=Leds.RED, sleeptime=0.5, duration=2.0, block=True)
#!/usr/bin/env python3 from ev3dev2.button import Button from ev3dev2.led import Leds from ev3dev2.sound import Sound sound = Sound() sound.beep() button = Button() leds = Leds() while True: if(button.right): leds.animate_cycle(('RED', 'GREEN', 'AMBER', 'ORANGE', 'YELLOW')) elif(button.left): leds.animate_flash('RED', sleeptime=0.5, duration=5) elif(button.down): leds.animate_police_lights('RED', 'GREEN', sleeptime=0.5, duration=5) elif(button.up): leds.animate_rainbow(increment_by=0.1, sleeptime=0.1, duration=10) else: leds.all_off() # Write your program here