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)