Files
t2000-steckerpruefer/alt/python/plug-check.py
2026-01-02 20:52:43 +01:00

145 lines
5.4 KiB
Python

import smbus
import time
import json
# Adressen der beiden MCP23017 Chips
AusgangRechts = 0x20 # Ausgang rechte Hälfte
AusgangLinks = 0x21 # Ausgang linke Hälfte
EingangRechts = 0x24 # Eingang rechte Hälfte
EingangLinks = 0x23 # Eingang linke 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)
RechtsA_ausgang = ["Z", "AA", "W", "AB", "AC", "AD", "AE", "AF"]
RechtsB_ausgang = ["Q", "U", "V", "T", "S", "R", "Y", "X"]
RechtsA_eingang = ["R", "T", "V", "X", "Z", "AB", "AD", "AE"]
RechtsB_eingang = ["Q", "S", "W", "U", "AA", "Y", "AC", "AF"]
LinksA_ausgang = ["C", "D", "E", "J", "F", "G", "H", "I"]
LinksB_ausgang = ["A", "B", "P", "O", "K", "L", "M", "N"]
LinksA_eingang = ["B", "D", "F", "H", "J", "K", "M", "I"]
LinksB_eingang = ["A", "C", "E", "G", "L", "N", "O", "P"]
array = []
def default():
adressen = [AusgangRechts, AusgangLinks, EingangRechts, EingangLinks]
# Schleife für alle Registeradressen (0x00 bis 0x15)
for register in range(0x00, 0x16):
for adresse in adressen:
bus.write_byte_data(adresse, register, 0x00)
# Konfiguriere alle Pins auf Chip 1 als Ausgang (A und B)
def configure_chip1_as_output():
bus.write_byte_data(AusgangRechts, IODIRA, 0x00) # Setze alle Pins von A als Ausgang
bus.write_byte_data(AusgangRechts, IODIRB, 0x00) # Setze alle Pins von B als Ausgang
bus.write_byte_data(AusgangLinks, IODIRA, 0x00) # Setze alle Pins von A als Ausgang
bus.write_byte_data(AusgangLinks, IODIRB, 0x00) # Setze alle Pins von B als Ausgang
# Konfiguriere alle Pins auf Chip 2 als Eingang (A und B)
def configure_chip2_as_input():
bus.write_byte_data(EingangRechts, IODIRA, 0xFF) # Setze alle Pins von A als Eingang
bus.write_byte_data(EingangRechts, IODIRB, 0xFF) # Setze alle Pins von B als Eingang
bus.write_byte_data(EingangLinks, IODIRA, 0xFF) # Setze alle Pins von A als Eingang
bus.write_byte_data(EingangLinks, IODIRB, 0xFF) # Setze alle Pins von B als Eingang
# Hauptprogramm
def main():
default()
time.sleep(0.5)
configure_chip1_as_output()
configure_chip2_as_input()
# 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(AusgangRechts, GPIOA, 0x00)
bus.write_byte_data(AusgangRechts, GPIOB, 0x00)
bus.write_byte_data(AusgangLinks, GPIOA, 0x00)
bus.write_byte_data(AusgangLinks, GPIOB, 0x00)
if pin < 16:
# Setze den gewählten Pin auf HIGH
if pin < 8: # Pins A0-A7
bus.write_byte_data(AusgangRechts, GPIOA, 1 << pin)
aktuellAn = RechtsA_ausgang[pin]
else: # Pins B0-B7
bus.write_byte_data(AusgangRechts, GPIOB, 1 << (pin - 8))
aktuellAn = RechtsB_ausgang[pin - 8]
else:
# Setze den gewählten Pin auf HIGH
if pin < 24: # Pins A0-A7
bus.write_byte_data(AusgangLinks, GPIOA, 1 << pin - 16)
aktuellAn = LinksA_ausgang[pin - 16]
else: # Pins B0-B7
bus.write_byte_data(AusgangLinks, GPIOB, 1 << (pin - 24))
aktuellAn = LinksB_ausgang[pin - 24]
#print("====================" + aktuellAn + "==========================")
time.sleep(0.02) # Kurze Pause, damit die Änderung sichtbar wird
Wert_Rechts_A = bus.read_byte_data(EingangRechts, GPIOA)
Wert_Links_A = bus.read_byte_data(EingangLinks, GPIOA)
Wert_Rechts_B = bus.read_byte_data(EingangRechts, GPIOB)
Wert_Links_B = bus.read_byte_data(EingangLinks, GPIOB)
for j in range(8): # Lese 4*8=32 Pins
bitmaske = 1 << j # Erstelle eine Maske: 1, 2, 4, 8, 16, ...
Bit_Rechts_A = bool(Wert_Rechts_A & bitmaske) # Isoliere das entsprechende Bit
Bit_Links_A = bool(Wert_Links_A & bitmaske) # Isoliere das entsprechende Bit
Bit_Rechts_B = bool(Wert_Rechts_B & bitmaske) # Isoliere das entsprechende Bit
Bit_Links_B = bool(Wert_Links_B & bitmaske) # Isoliere das entsprechende Bit
if Bit_Rechts_A == True:
if aktuellAn != RechtsA_eingang[j]:
array.append([aktuellAn ,RechtsA_eingang[j]])
#print("Gefunden: " + RechtsA_eingang[j])
if Bit_Links_A == True:
if aktuellAn != LinksA_eingang[j]:
array.append([aktuellAn ,LinksA_eingang[j]])
#print("Gefunden: " + LinksA_eingang[j])
if Bit_Rechts_B == True:
if aktuellAn != RechtsB_eingang[j]:
array.append([aktuellAn ,RechtsB_eingang[j]])
#print("Gefunden: " + RechtsB_eingang[j])
if Bit_Links_B == True:
if aktuellAn != LinksB_eingang[j]:
array.append([aktuellAn ,LinksB_eingang[j]])
#print("Gefunden: " + LinksB_eingang[j])
json_output = json.dumps(array)
print(json_output)
if __name__ == "__main__":
main()