#Didaktik der Informatik - Universität Bayreuth #Copyright: CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/) #Version 2025-05-19 from microbit import * import radio import music import speech import neopixel from machine import time_pulse_us import random #random def randint(start, begin): return random.randint(start, begin-1) #print def print_slowly(str): sleep(1000) print(str) sleep(1000) #Display def show_display(str): display.show(str) def scroll_display(str): display.scroll(str) def scroll_display_advanced(str, delay=150, loop=False, wait=True, monospace=False): display.scroll(str, delay, loop, wait, monospace) def clear_display(): display.clear() def set_display_pixel(x, y, brightness=9): display.set_pixel(x, y, brightness) def get_display_pixel(x, y): return display.get_pixel(x, y) #Buttons def is_button_a_pressed(): return button_a.is_pressed() def is_button_b_pressed(): return button_b.is_pressed() def was_button_a_pressed(): return button_a.was_pressed() def was_button_b_pressed(): return button_b.was_pressed() def get_presses_on_button_a(): return button_a.get_presses() def get_presses_on_button_b(): return button_b.get_presses() #Accelerometer def get_accelerometer_x(): return accelerometer.get_x() def get_accelerometer_y(): return accelerometer.get_y() def get_accelerometer_z(): return accelerometer.get_z() def was_accelerometer_gesture(gesture): if(accelerometer.was_gesture(gesture)): return True else: return False def is_accelerometer_gesture(gesture): if(accelerometer.is_gesture(gesture)): return True else: return False #Radio def config_radio(gruppe): #Advance radio ist nicht aktiv radio.config(gruppe) def turn_radio_on(): radio.on() def turn_radio_off(): radio.off() def send_radio(text): radio.send(text) def receive_radio(): return radio.receive() #Lichtlevel def read_light_level(): return display.read_light_level() #kompass def heading_compass(): return compass.heading() def calibrate_compass(): compass.calibrate() def get_compass_x(): return compass.get_x() def get_compass_y(): return compass.get_y() def get_compass_z(): return compass.get_z() def get_compass_field_strenght(): return compass.get_field_strength() #music def play_music(song, pin_nr=-1, wait=True, loop=False): if pin_nr != -1: speaker.off() music.play(song, get_pin(pin_nr), wait, loop) else: music.play(song, None, wait, loop) speaker.on() def set_music_tempo(tempo): music.set_tempo(tempo) def play_tone(frequency, duration=1, pin_nr=-1, wait=True): if pin_nr != -1: speaker.off() music.pitch(frequency, duration, get_pin(pin_nr), wait) else: music.pitch(frequency, duration, None, wait) speaker.on() def play_speech_internal(word, pitch = 62, speed = 72, mouth = 128, throat = 128): speech.say(word, pitch, speed, mouth, throat) def play_audio_internal(source, wait=True): audio.play(source, wait) def turn_speaker_off(): speaker.off() def turn_speaker_on(): speaker.on() #Microphone def get_current_microphone_event(): return microphone.current_event() def set_treshold_of_microphone(SoundEvent, n): microphone.set_threshold(SoundEvent, n) def get_sound_level_of_microphone(): return microphone.sound_level() #Touch logo def is_touch_logo_touched(): return pin_logo.is_touched() #Pins def get_pin(pin_nr): pin = 'pin' + str(pin_nr) if pin_nr == 5 or pin_nr == 11: print("Dieser Pin ist für einen Button reserviert. Benutze bitte einen anderen.") return None elif pin_nr < 0 or pin_nr == 17 or pin_nr == 18 or pin_nr > 20: return None return globals()[pin] def read_digital(pin_nr): pin = get_pin(pin_nr) if pin == None: print("Falscher Pin.") return 0 else: return pin.read_digital() def write_digital(pin_nr, value): pin = get_pin(pin_nr) if pin == None: print("Falscher Pin.") else: pin.write_digital(value) def read_analog(pin_nr): pin = get_pin(pin_nr) if pin == None: print("Falscher Pin.") return 0 else: return pin.read_analog() def write_analog(pin_nr, value, modulo=True): pin = get_pin(pin_nr) if pin == None: print("Falscher Pin.") return if modulo == True: value = value % 1024 pin.write_analog(value) elif value < 0 or value > 1023: print("Falscher Wert.") else: pin.write_analog(value) def use_pins_with_breadboard(): display.off() #Neopixel np = None def prepare_neopixel(pin_nr, n): global np np = neopixel.NeoPixel(get_pin(pin_nr), n) def clear_neopixel(): global np if np == None: print("Du musst deinen Neopixel erst initialisieren.") else: np.clear() def neopixel_fill(r,g,b): global np if np == None: print("Du musst deinen Neopixel erst initialisieren.") else: np.fill((r,g,b)) def neopixel_set_pixel(position, r, g, b, show=False): global np if np == None: print("Du musst deinen Neopixel erst initialisieren.") else: if r > 255: r = 255 if g > 255: g = 255 if b > 255: b = 255 np[position] = (r, g, b) if show: np.show() def neopixel_clear_pixel(position, show=False): global np if np == None: print("Du musst deinen Neopixel erst initialisieren.") else: np[position] = (0, 0, 0) if show: np.show() def neopixel_show(): global np if np == None: print("Du musst deinen Neopixel erst initialisieren.") else: np.show() #Ultrasonic class HCSR04: def __init__(self, triggerPin, echoPin): self.triggerPin = triggerPin self.echoPin = echoPin self.triggerPin.write_digital(0) self.echoPin.read_digital() def distance_mm(self): self.triggerPin.write_digital(1) self.triggerPin.write_digital(0) micro = time_pulse_us(self.echoPin, 1) return (micro / 2) * 0.34 def distance_cm(self): return int(self.distance_mm() / 10) sonar = None def prepare_ultrasonic_sensor(trigger_pin_nr, echo_pin_nr): global sonar triggerPin = get_pin(trigger_pin_nr) echoPin = get_pin(echo_pin_nr) sonar = HCSR04(triggerPin, echoPin) def ultrasonic_distance_cm(): global sonar if sonar == None: print("Du musst den Ultraschallsensor zuerst initialisieren.") else: return sonar.distance_cm()