From 86e1f13bcdf7a0267e81575b5eb057b7499fc234 Mon Sep 17 00:00:00 2001 From: Odin Grav Date: Wed, 24 Sep 2025 11:15:22 +0200 Subject: [PATCH] la til triks --- oving_3/main.py | 51 +++++++++++++++++++++++++++++++---------- oving_3/rtttl_player.py | 9 ++++---- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/oving_3/main.py b/oving_3/main.py index b7189b5..5e8bb24 100644 --- a/oving_3/main.py +++ b/oving_3/main.py @@ -38,6 +38,27 @@ #ev3.screen.print("Spiller", player.name, "...") #player.play() +def doRandomTrick(): + trickIndex = randint(0, 1) + + if trickIndex == 1: + spin() + elif trickindex == 2: + playMusic() + +def spin(): + directions = [-1, 1] + directionIndex = randint(0, 1) + robotDriveBase.stop() + speaker.say("Look at my trick") + robotDriveBase.turn(360 * directions[directionIndex]) + +def playMusic(): + robotDriveBase.stop() + player = RTTTLPlayer(ev3, songs[3]) + ev3.screen.print("Spiller", player.name, "...") + player.play() + leftMotor = Motor(port=Port.A) rightMotor = Motor(port=Port.C) robotDriveBase = DriveBase(leftMotor, rightMotor, wheel_diameter=56, axle_track=160) @@ -50,33 +71,39 @@ speaker = ev3.speaker -leftSensorThreshold = 9 -rigthSensorThreshold = 9 +leftSensorThreshold = 8 +rigthSensorThreshold = 7 +speed = 50 currentTime = time.time() lastCorrectino = currentTime lastDirection = 1 +lastTrick = currentTime while True: currentTime = time.time() - if currentTime - lastCorrectino > 2: - while leftColorSensor.reflection() > 10 or rightColorSensor.reflection() < 10: - robotDriveBase.drive(-100, 50 * lastDirection) + """ if currentTime - lastCorrectino > 2: + while leftColorSensor.reflection() > leftSensorThreshold or rightColorSensor.reflection() < rigthSensorThreshold: + robotDriveBase.drive(-speed, 50 * lastDirection) lastCorrectino = time.time() - continue + continue """ + + if currentTime - lastTrick > 10: + doTrick() + lastTrick = time.time() if leftColorSensor.reflection() < leftSensorThreshold: - robotDriveBase.drive(-100, 25) - lastCorrectino == currentTime - lastDirection = 1 + robotDriveBase.drive(-speed, 25) + lastCorrectino == time.time() + lastDirection = -1 continue if rightColorSensor.reflection() < rigthSensorThreshold: - robotDriveBase.drive(-100, -25) + robotDriveBase.drive(-speed, -25) lastCorrectino = currentTime - lastDirection = -1 + lastDirection = 1 continue - robotDriveBase.drive(-100, 50) \ No newline at end of file + robotDriveBase.drive(-speed, 50) \ No newline at end of file diff --git a/oving_3/rtttl_player.py b/oving_3/rtttl_player.py index 8ca0e4f..5551073 100644 --- a/oving_3/rtttl_player.py +++ b/oving_3/rtttl_player.py @@ -8,13 +8,12 @@ class RTTTLPlayer: 'g#': 25.96, 'a': 27.50, 'a#': 29.14, 'b': 30.87 } - def __init__(self, ev3, rtttl: str): + def __init__(self, ev3): """ :param ev3: EV3Brick instance from pybricks.hubs :param rtttl: RTTTL string (name:d=4,o=5,b=100:notes) """ self.ev3 = ev3 - self.name, self.defaults, self.notes = self.parse_rtttl(rtttl) def parse_rtttl(self, rtttl: str): name, settings, notes = rtttl.split(':') @@ -32,15 +31,15 @@ def note_to_freq(self, note: str, octave: int): base = self.NOTE_FREQS[note] return round(base * (2 ** octave), 2) - def play(self, tempo_scale: float = 1.0): + def play(self, name, defaults, notes, tempo_scale: float = 1.0): """ Play the parsed RTTTL melody. :param tempo_scale: Scale factor for speed (1.0 = normal, 2.0 = twice as fast, 0.5 = half speed) """ - bpm = self.defaults.get('b', 63) + bpm = defaults.get('b', 63) whole_note = (60 / bpm) * 4 * 1000 # ms - for raw in self.notes: + for raw in notes: match = re.match(r'(\d+)?([a-gp][#]?)(\d)?(\.*)?', raw.strip(), re.I) if not match: continue