21. Lektion: Pin'sAus Attraktor WikiVersion vom 14. Dezember 2023, 15:14 Uhr von Kapest (Diskussion | Beiträge) InhaltsverzeichnisWas bietet uns die Klasse Pin?In Micropython ist der Zugriff auf die Hardware als Klasse implementiert. Für jeden Pin wird dementsprechend eine Instanz der Klasse Pin angelegt. Diese enthält die Einstellungen und die Daten des Pin.
Im Raspi Pico Microphyton:>>> import machine >>> dir(machine.Pin) ['__class__', '__name__', 'value', '__bases__', '__dict__', 'ALT', 'ALT_GPCK', 'ALT_I2C', 'ALT_PIO0', 'ALT_PIO1', 'ALT_PWM', 'ALT_SIO', 'ALT_SPI', 'ALT_UART', 'ALT_USB', 'IN', 'IRQ_FALLING', 'IRQ_RISING', 'OPEN_DRAIN', 'OUT', 'PULL_DOWN', 'PULL_UP', 'board', 'cpu', 'high', 'init', 'irq', 'low', 'off', 'on', 'toggle'] Pins initialisieren.So sieht eine umfangreiche Initialisierung aus: my_pin = machine.Pin(id, mode=- 1, pull=- 1, *, value=None, drive=0, alt=- 1) Üblicherweise reicht diese Kurzform:from machine import Pin p0 = Pin(0, Pin.OUT) p2 = Pin(2, Pin.IN, Pin.PULL_UP) Bedeutung der Parameter:
Methoden von Pin
Pins als Ausgangfrom machine import Pin pin_von_led = 22 led_pin = Pin(pin_von_led, Pin.OUT) led_pin.value(0) LED ansteuern.
LED blinken lassen.So findet man es zu Abtippen: while True: led_pin.value(1) sleep_ms(500) led_pin.value(0) sleep_ms(500) Hier eine Alternative: while True: if led_pin.value() == 0: led_pin.value(1) elif: led_pin.value(0) sleep_ms(500) Mit der toggle.Methode: while True: led_pin.toggle() sleep_ms(500) toggle / XOR '^'XOR ist eine logische Vernüpfung die nur 1 ergibt, wenn a oder b 1 ist, wenn a und b 1 sind wird 0 ausgegeben.
Übung:>>> pin_x = 0 >>> pin_x = pin_x ^ 1 >>> pin_x 1 >>> pin_x = pin_x ^ 1 >>> pin_x 0 >>> Als konkretes Beispiel: # mit toggle-Methode led_pin.toggle() # ohne toggle-Methode # mit bitwise xor led_pin.value(led_pin.value()^1) LED dimmen.Das Dimmen einer LED unterscheidet sich vom Blinken nur durch die Umschaltgeschwindigkeit. Sobald unser Auge den Wechel nicht mehr wahrnimmt, wird das Impuls-Pausen-Verhältnis in Helligkeit umgesetzt. Übung:
Pins als EingangTaster abfragen.Taster abfragenfrom machine import Pin pin_center = 15 button = Pin(pin_center, Pin.IN, Pin.PULL_DOWN) button.value() 0 # nun bei gedrückter Taste button.value() 1 Übung:
Übung:
Taster entprellen# button_6.py from machine import Pin from time import sleep_ms pin_center = 15 pin_led = 22 button = Pin(pin_center, Pin.IN, Pin.PULL_DOWN) led = Pin(pin_led, Pin.OUT) while True: while not button.value(): pass sleep_ms(15) if button.value(): led.toggle() while button.value(): pass Übung:
https://docs.m5stack.com/en/mpy/official/machine
BuzzerDas Demoboard enthält auch einen Buzzer. Hier ein kleines Programm, das ihm einen Ton entlockt: import machine import time buzz = machine.Pin(10, machine.Pin.OUT) freq = 440 verz = int(1/freq/2 * 1E6) while True: buzz.value(1) time.sleep_us(verz) buzz.value(0) time.sleep_us(verz) |