Hallo.
ich ich lasse einen Mikrocontroller mit einem Server mit Django kommunizieren. Der Mikrocontroller sendet mir eine Zahl zwischen 0 - 255 zurück. Diese Zahl stellt 8 Eingänge dar.
Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low. Also in binärer Schreibweise. Wie finde ich in Python heraus welcher Pin High/Low ist? Ich möchte also eine dezimale Zahl zu 8 booleschen Werten umwandeln.
MfG
senden9
Dezimale Zahl (0-255) zu 8 booleschen Werten
Code: Alles auswählen
portwert = 8
stelle = 3 # 0-7
if (1 << stelle) & portwert:
print "stelle ", stelle, " gesetzt"
@senden9:
Wenn
Wenn
das stimmt, sind allerdings die Eingänge vertauscht und Du müsstest das zusätzlich behandeln.senden9 hat geschrieben:Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low
Sorry das war ein Denkfehler und stimmt so nicht. Die Reihenfolge ist anders.jerch hat geschrieben:@senden9:
Wenndas stimmt, sind allerdings die Eingänge vertauscht und Du müsstest das zusätzlich behandeln.senden9 hat geschrieben:Z.B ist 12 => Eingang 1 High / Eingang 2 High / Eingang 3 Low / Eingang 4 Low / Eingang 5 Low / Eingang 6 Low / Eingang 7 Low / Eingang 8 Low
Der obrige Code funktioniert übrigens hervorragend. Danke!
Wenn Du eh immer mit der Liste der Eingänge arbeitest, kannst Du das nutzen:bzw. ohne [::-1], dann steht `int_to_bitlist(12, 8 )[n-1]` für das n-te Bit. Das [::-1] hab ich nur eingefügt, da wir höherwertige Stellen bei der Ausgabe normalerweise links vermuten
Code: Alles auswählen
>>> def int_to_bitlist(num, bits):
... return [num>>n & 1 for n in xrange(bits)][::-1]
...
>>> int_to_bitlist(12, 8)
[0, 0, 0, 0, 1, 1, 0, 0]
Nein. Spätestens wenn jemand einen Bug fände, der Freitags nachts um 23:42 bei Neumond unter Umständen Schwierigkeiten mit dem Code machen könnte wenn die Quadratwurzel des Unix-Sekundenzählers eine Primzahl ist, dann würde alsbald ein Geschrei anheben, dass das "Gelöst"-Flag weg muss. Deshalb führen wir das hier erst gar nicht ein.senden9 hat geschrieben:PS: Muss ich in diesem Forum irgendwo auf "Gelöst" oder so was drücken?