53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
import smbus
|
|
import time
|
|
import json
|
|
|
|
# Adressen der beiden MCP23017 Chips
|
|
MP = 0x20 # Ausgang rechte Hälfte
|
|
|
|
|
|
# Register-Adressen für den MCP23017
|
|
IODIRA = 0x00 # Eingang / Ausgang A
|
|
IODIRB = 0x01 # Eingang / Ausgang B
|
|
GPIOA = 0x12 # GPIO A
|
|
GPIOB = 0x13 # GPIO B
|
|
|
|
PULLUPA = 0x0C
|
|
PULLUPB = 0x0D
|
|
|
|
# Initialisiere den I2C Bus
|
|
bus = smbus.SMBus(1)
|
|
|
|
# Hauptprogramm
|
|
def main():
|
|
time.sleep(0.5)
|
|
|
|
for pin in range(8):
|
|
|
|
|
|
bus.write_byte_data(MP, IODIRA, ~(1 << pin))
|
|
time.sleep(0.02)
|
|
bus.write_byte_data(MP, PULLUPA, ~(1 << pin))
|
|
time.sleep(0.02)
|
|
|
|
bus.write_byte_data(MP, GPIOA, ~(1 << pin))
|
|
time.sleep(0.02)
|
|
|
|
|
|
print("====================" + str(pin) + "==========================")
|
|
|
|
wert = bus.read_byte_data(MP, GPIOA)
|
|
|
|
for j in range(8): # Lese 4*8=32 Pins
|
|
bitmaske = 1 << j
|
|
|
|
wert_bitweise = bool(wert & bitmaske)
|
|
|
|
if wert_bitweise == False and j != pin:
|
|
print(str(j))
|
|
|
|
time.sleep(0.02) # Kurze Pause, damit die Änderung sichtbar wird
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |