21. Lektion: Pin's
Was bietet uns die Klasse Pin?
Im M5Microphyton:
>>> import machine >>> dir(machine.Pin) ['__class__', '__name__', 'value', '__bases__', '__dict__', 'IN', 'IRQ_FALLING', 'IRQ_RISING', 'OPEN_DRAIN', 'OUT', 'PULL_DOWN', 'PULL_HOLD', 'PULL_UP', 'WAKE_HIGH', 'WAKE_LOW', 'init', 'irq', 'off', 'on']
Im Raspi 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:
- id
 - Nummer des Pin (GPIOxx)
 - mode
 - Pin.IN, Pin.OUT, Pin.OPEN_DRAIN 
Open Collector / Open Drain - pull
 - None, Pin.PULL_UP, Pin.PULL_DOWN 
PullUp / PullDown 
Methoden von Pin
- Pin.init(mode=- 1, pull=- 1, *, value=None, drive=0, alt=- 1)
 - Neuinitialisierung des Pins unter Verwendung der angegebenen Parameter.
 - Pin.value(x)
 - Diese Methode ermöglicht das Setzen und Lesen des Pins. Wird x (0 oder 1) angegeben wird der Pin darauf gesetzt. Ohne x wird der Wert des Pins ausgelesen.
Verhalten von Pin.value() - Pin.high()
 - Setzt den Pin auf 1. Nicht ESP32!
 - Pin.low()
 - Setzt den Pin auf 0. Nicht ESP32!
 - Pin.off()
 - Setzt den Pin auf 0.
 - Pin.on()
 - Setzt den Pin auf 1.
 - Pin.toggle()
 - Pin invertieren. Nur Raspberry Pi Pico. Nicht bei docs.micropython.org erwähnt.
 
Pins als Ausgang
from machine import Pin pin_von_led = 25 led_pin = Pin(pin_von_led, Pin.OUT) led_pin.value(0)
LED ansteuern.
- Anschaltung
- nach Vcc
 - nach GND
 
 
- Software
 
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.
| A | B | Q | 
|---|---|---|
| 0 | 0 | 0 | 
| 1 | 0 | 1 | 
| 0 | 1 | 1 | 
| 1 | 1 | 0 | 
Ü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:
- Schreibt ein Programm mit dem die Helligkeit der LED verändert werden kann.
- Ändert dazu den Wert von sleep_ms() auf 10 und 1.
 - Die Helligkeit wird nicht im laufenden Programm geändert. Dazu wird das Programm gestoppt. Entsprechende Werte im Script geändert und neu gestartet.
 - Ersetzt sleep_ms() durch sleep_us() und passt den Wert an.
 
 
Pins als Eingang
Taster abfragen.
Taster abfragen
Übung:
- Schreibe ein Programm, das die LED leuchten lässt wenn der Taster gedrückt ist.
 
Übung:
- Schreibe ein Programm, dass beim ersten Tastendruck die LED einschaltet und beim nächsten sie wieder ausschaltet.
 
Taster entprellen
Übung:
- Übung 1:
- Schreibe ein Programm bei dem Du mit der Taste die Blinkfrequenz verändern kannst.
- max: 1000ms, min: 100ms, step: 100ms.
 
 
 - Schreibe ein Programm bei dem Du mit der Taste die Blinkfrequenz verändern kannst.
 - Übung 2:
- Schreibe ein Programm bei dem Du mit der Taste die Helligkeit verändern kannst.
- max. 100%, min: 0%., step: 10%.
 
 
 - Schreibe ein Programm bei dem Du mit der Taste die Helligkeit verändern kannst.