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 # Initialisiere den I2C Bus bus = smbus.SMBus(1) def default(): # Schleife für alle Registeradressen (0x00 bis 0x15) for register in range(0x00, 0x16): bus.write_byte_data(MP, register, 0x00) # Konfiguriere alle Pins auf Chip 1 als Ausgang (A und B) def configure_chip1_as_output(): bus.write_byte_data(MP, IODIRA, 0x00) # Setze alle Pins von A als Ausgang bus.write_byte_data(MP, IODIRB, 0x00) # Setze alle Pins von B als Ausgang # Hauptprogramm def main(): default() time.sleep(0.5) configure_chip1_as_output() # Teste alle Pins auf Chip 1 (A0-A7, B0-B7) for pin in range(32): # 0 bis 31 #print(f"Setze Pin {pin} auf HIGH auf Chip 1") bus.write_byte_data(MP, GPIOA, 0x00) if pin < 16: # Setze den gewählten Pin auf HIGH if pin < 8: # Pins A0- bus.write_byte_data(MP, IODIRA, ~(1 << pin)) bus.write_byte_data(MP, GPIOA, 1 << pin) print("====================" + str(pin) + "==========================") time.sleep(0.2) # Kurze Pause, damit die Änderung sichtbar wird wert = bus.read_byte_data(MP, GPIOA) for j in range(8): # Lese 4*8=32 Pins bitmaske = 1 << j # Erstelle eine Maske: 1, 2, 4, 8, 16, ... wert_bitweise = bool(wert & bitmaske) # Isoliere das entsprechende Bit if wert_bitweise == True: print("Gefunden: " + str(j)) if __name__ == "__main__": main()