MicroPython IO_Expander_Read

Hier werden alle Sensorinformationen durch den IOExpander per I2C ausgelesen. Das Auslesen übernimmt dabei die Funktion fetchSensorData(). Es werden hierbei keine Übergabeparameter benötigt. Der Rückgabewert ist ein Dictionary welches die folgenden Informationen enthält:

0:   Speed-Sensor Links

1:   Speed-Sensor Rechts

2:   LineTracking-Sensor Links

3:   LineTracking-Sensor Mitte

4:   LineTracking-Sensor Rechts

5:   Hindernis-Sensor Links

6:   Hindernis-Sensor Rechts

7:   Optionaler Sensor

Die einzelnen Parameter geben den Sensorstatus als boolsche Variable an. True steht hierbei für eine HIGH-Erkennung und False für eine LOW-Erkennung.

Zusatzinformationen: Die Funktion zfill(s, width) wird in dieser Datei verwendet. Sie ist eigentlich Bestandteil von Python, wurde bei der Portierung auf den micro:bit jedoch aus Speichergründen ausgelassen. Die Funktion ist jedoch für das Auslesen der Sensordaten relevant und wurde von uns daher hinzugefügt. Bei der Erstellung von eigenen Dateien, die das Auslesen der Sensordaten aufgreifen, ist diese Funktion notwendig und sollte daher ebenfalls übernommen werden.

# Import des micro:bit Moduls
from microbit import *

# Initialisierung der I2C Schnittstelle
i2c.init(freq=400000, sda=pin20, scl=pin19)

# Da die Funktion zfill nicht in micro:bit Micropython enthalten ist,
# muss diese als Funktion eingefügt werden
def zfill(s, width):
    return '{:0>{w}}'.format(s, w=width)

# IO Expander Daten auslesen und in sen_data speichern
def fetchSensorData():
    # Hexadezimaldaten auslesen und in binär umwandeln
    data = "{0:b}".format(ord(i2c.read(0x38, 1)))
    # die Daten ggf. auf 8 Ziffern auffüllen
    data = zfill(data, 8)
    # blo_data_dict als Dictionary deklarieren
    bol_data_dict = {}
    # Zähler für die Schleife, die die Daten aus data in bol_data_dict einträgt
    bit_count = 7
    # Übertragung der Daten aus data in bol_data_dict
    for i in data:
        if i == "0":
            bol_data_dict[bit_count] = False
            bit_count -= 1
        else:
            bol_data_dict[bit_count] = True
            bit_count -= 1
    # Daten in die globale Variable sen_data übertragen
    # bit 0 = SpeedLeft, bit 1 = SpeedRight, bit 2 = LineTrackerLeft,
    # bit 3 = LineTrackerMiddle, bit 4 = LineTrackerRight,
    # bit 5 = ObstclLeft, bit 6 = ObstclRight, bit 7 = Buzzer
    return bol_data_dict


# while Schleife die showSensorData mit einem Abstand
# von einer Sekunde ausführt und anzeigt
while True:
    sen_data = fetchSensorData()
    print("\n\naus der Variable sen_data")
    print(sen_data)
    sleep(1000)
    print("\n\ndirekt aus der Funktion fetchSensorData()")
    print(fetchSensorData())
    sleep(1000)

Achtung!

Ihr Webbrowser ist veraltet. Wechseln Sie jetzt zu einem aktuellen Browser für mehr Sicherheit, Geschwindigkeit und den besten Komfort auf dieser Seite.