231 lines
9.3 KiB
Python
231 lines
9.3 KiB
Python
import smbus
|
|
import time
|
|
import json
|
|
import sys
|
|
|
|
pruefer1 = 0x20
|
|
pruefer2 = 0x21
|
|
observer1 = 0x22
|
|
observer2 = 0x23
|
|
spurkabel1 = 0x24
|
|
spurkabel2 = 0x25
|
|
|
|
adressen = [pruefer1, pruefer2, observer1, observer2, spurkabel1, spurkabel2]
|
|
|
|
IODIRA = 0x00 # Eingang / Ausgang A
|
|
IODIRB = 0x01 # Eingang / Ausgang B
|
|
GPPUA = 0x0C # Eingang / Ausgang A
|
|
GPPUB = 0x0D # Eingang / Ausgang B
|
|
GPIOA = 0x12 # GPIO A
|
|
GPIOB = 0x13 # GPIO B
|
|
|
|
array = {}
|
|
logs = {}
|
|
data = []
|
|
|
|
|
|
try:
|
|
# Initialisiere den I2C Bus
|
|
bus = smbus.SMBus(1)
|
|
except:
|
|
logs["errorcode"] = 12
|
|
array["logs"] = logs
|
|
json_output = json.dumps(array)
|
|
print(json_output)
|
|
sys.exit(0)
|
|
|
|
def default():
|
|
|
|
#Schleife für alle Registeradressen (0x00 bis 0x15)
|
|
for register in range(0x00, 0x16):
|
|
for adresse in adressen:
|
|
#print("Setze " + str(adresse) + " in Register " + str(register) + " auf Wert 0x00")
|
|
bus.write_byte_data(adresse, register, 0x00)
|
|
|
|
|
|
#print("Hallo! Es wird damit begonnen, alle Register zurpckzusetzen...")
|
|
#Aktiviere alle Pullups und setze alle als Eingang
|
|
time.sleep(0.05)
|
|
for adresse in adressen:
|
|
bus.write_byte_data(adresse, IODIRA, 0xFF)
|
|
bus.write_byte_data(adresse, GPPUA, 0xFF)
|
|
bus.write_byte_data(adresse, IODIRB, 0xFF)
|
|
bus.write_byte_data(adresse, GPPUB, 0xFF)
|
|
|
|
#print("============= Reset erfolgreich! =============")
|
|
|
|
def main():
|
|
try:
|
|
default()
|
|
except:
|
|
logs["errorcode"] = 11
|
|
return
|
|
for pin in range(32): # 0 bis 31
|
|
aktuellAn = pin
|
|
|
|
for adresse in adressen:
|
|
bus.write_byte_data(adresse, IODIRA, 0xFF)
|
|
bus.write_byte_data(adresse, GPPUA, 0xFF)
|
|
bus.write_byte_data(adresse, IODIRB, 0xFF)
|
|
bus.write_byte_data(adresse, GPPUB, 0xFF)
|
|
|
|
time.sleep(0.05)
|
|
|
|
if pin < 16:
|
|
# Setze den gewählten Pin auf HIGH
|
|
if pin < 8: # Pins A0-A7
|
|
|
|
wert = 0xFF & ~(1 << pin) # Alle Bits auf 1, außer das eine gewünschte auf 0
|
|
|
|
bus.write_byte_data(pruefer1, GPPUA, wert)
|
|
bus.write_byte_data(pruefer1, IODIRA, wert)
|
|
bus.write_byte_data(pruefer1, GPIOA, 0x00)
|
|
|
|
else: # Pins B0-B7
|
|
wert = 0xFF & ~(1 << pin - 8) # Alle Bits auf 1, außer das eine gewünschte auf 0
|
|
|
|
bus.write_byte_data(pruefer1, GPPUB, wert)
|
|
bus.write_byte_data(pruefer1, IODIRB, wert)
|
|
bus.write_byte_data(pruefer1, GPIOB, 0x00)
|
|
else:
|
|
# Setze den gewählten Pin auf HIGH
|
|
if pin < 24: # Pins A0-A7
|
|
wert = 0xFF & ~(1 << pin - 16) # Alle Bits auf 1, außer das eine gewünschte auf 0
|
|
|
|
bus.write_byte_data(pruefer2, GPPUA, wert)
|
|
bus.write_byte_data(pruefer2, IODIRA, wert)
|
|
bus.write_byte_data(pruefer2, GPIOA, 0x00)
|
|
else: # Pins B0-B7
|
|
wert = 0xFF & ~(1 << pin - 24) # Alle Bits auf 1, außer das eine gewünschte auf 0
|
|
|
|
bus.write_byte_data(pruefer2, GPPUB, wert)
|
|
bus.write_byte_data(pruefer2, IODIRB, wert)
|
|
bus.write_byte_data(pruefer2, GPIOB, 0x00)
|
|
|
|
time.sleep(0.05)
|
|
|
|
##print(f"i2cget -y 1 0x20 0x12")
|
|
pruefer1_A_value = bus.read_byte_data(pruefer1, GPIOA)
|
|
pruefer1_B_value = bus.read_byte_data(pruefer1, GPIOB)
|
|
pruefer2_A_value = bus.read_byte_data(pruefer2, GPIOA)
|
|
pruefer2_B_value = bus.read_byte_data(pruefer2, GPIOB)
|
|
|
|
observer1_A_value = bus.read_byte_data(observer1, GPIOA)
|
|
observer1_B_value = bus.read_byte_data(observer1, GPIOB)
|
|
observer2_A_value = bus.read_byte_data(observer2, GPIOA)
|
|
observer2_B_value = bus.read_byte_data(observer2, GPIOB)
|
|
|
|
spurkabel1_A_value = bus.read_byte_data(spurkabel1, GPIOA)
|
|
spurkabel1_B_value = bus.read_byte_data(spurkabel1, GPIOB)
|
|
spurkabel2_A_value = bus.read_byte_data(spurkabel2, GPIOA)
|
|
spurkabel2_B_value = bus.read_byte_data(spurkabel2, GPIOB)
|
|
|
|
#print(f"------>>>>Es konnte vom pruefer1_A_value der Wert {format(pruefer1_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom pruefer1_B_value der Wert {format(pruefer1_B_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom pruefer2_A_value der Wert {format(pruefer2_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom pruefer2_B_value der Wert {format(pruefer2_B_value, '08b')} festgetsellt werden")
|
|
|
|
#print(f"------>>>>Es konnte vom observer1_A_value der Wert {format(observer1_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom observer1_B_value der Wert {format(observer1_B_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom observer2_A_value der Wert {format(observer2_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom observer2_B_value der Wert {format(observer2_B_value, '08b')} festgetsellt werden")
|
|
|
|
#print(f"------>>>>Es konnte vom spurkabel1_A_value der Wert {format(spurkabel1_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom spurkabel1_B_value der Wert {format(spurkabel1_B_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom spurkabel2_A_value der Wert {format(spurkabel2_A_value, '08b')} festgetsellt werden")
|
|
#print(f"------>>>>Es konnte vom spurkabel2_B_value der Wert {format(spurkabel2_B_value, '08b')} festgetsellt werden")
|
|
|
|
#print("===========================================================================")
|
|
|
|
|
|
for j in range(8): # Verarbeite 4*8=32 Pins + Jeweils 32 Observer- und Spurkabel-Daten
|
|
bitmaske = 1 << j # Erstelle eine Maske: 1, 2, 4, 8, 16, ...
|
|
|
|
pruefer1_A_value_bit = bool(pruefer1_A_value & bitmaske)
|
|
pruefer1_B_value_bit = bool(pruefer1_B_value & bitmaske)
|
|
pruefer2_A_value_bit = bool(pruefer2_A_value & bitmaske)
|
|
pruefer2_B_value_bit = bool(pruefer2_B_value & bitmaske)
|
|
|
|
observer1_A_value_bit = bool(observer1_A_value & bitmaske)
|
|
observer1_B_value_bit = bool(observer1_B_value & bitmaske)
|
|
observer2_A_value_bit = bool(observer2_A_value & bitmaske)
|
|
observer2_B_value_bit = bool(observer2_B_value & bitmaske)
|
|
|
|
spurkabel1_A_value_bit = bool(spurkabel1_A_value & bitmaske)
|
|
spurkabel1_B_value_bit = bool(spurkabel1_B_value & bitmaske)
|
|
spurkabel2_A_value_bit = bool(spurkabel2_A_value & bitmaske)
|
|
spurkabel2_B_value_bit = bool(spurkabel2_B_value & bitmaske)
|
|
|
|
|
|
|
|
i = j
|
|
|
|
|
|
|
|
if spurkabel1_A_value_bit == False:
|
|
data.append([[pin ,i],0])
|
|
|
|
if pruefer1_A_value_bit == False and observer1_A_value_bit == True:
|
|
data.append([[pin ,i],2])
|
|
#print("Prüfer sagt NEIN, Observer sagt JA");
|
|
if pruefer1_A_value_bit == True and observer1_A_value_bit == False:
|
|
data.append([[pin ,i],3])
|
|
#print("Prüfer sagt JA, Observer sagt NEIN");
|
|
|
|
|
|
i = j + 8
|
|
|
|
|
|
if spurkabel1_B_value_bit == False:
|
|
data.append([[pin ,i],0])
|
|
|
|
if pruefer1_B_value_bit == False and observer1_B_value_bit == True:
|
|
data.append([[pin ,i],2])
|
|
#print("Prüfer sagt NEIN, Observer sagt JA");
|
|
if pruefer1_B_value_bit == True and observer1_B_value_bit == False:
|
|
data.append([[pin ,i],3])
|
|
#print("Prüfer sagt JA, Observer sagt NEIN");
|
|
|
|
|
|
i = j + 16
|
|
|
|
|
|
if spurkabel2_A_value_bit == False:
|
|
data.append([[pin ,i],0])
|
|
|
|
if pruefer2_A_value_bit == False and observer2_A_value_bit == True:
|
|
data.append([[pin ,i],2])
|
|
#print("Prüfer sagt NEIN, Observer sagt JA");
|
|
if pruefer2_A_value_bit == True and observer2_A_value_bit == False:
|
|
data.append([[pin ,i],3])
|
|
#print("Prüfer sagt JA, Observer sagt NEIN");
|
|
|
|
|
|
i = j + 24
|
|
|
|
if spurkabel2_B_value_bit == False:
|
|
data.append([[pin ,i],0])
|
|
|
|
if pruefer2_B_value_bit == False and observer2_B_value_bit == True:
|
|
data.append([[pin ,i],2])
|
|
#print("Prüfer sagt NEIN, Observer sagt JA");
|
|
if pruefer2_B_value_bit == True and observer2_B_value_bit == False:
|
|
data.append([[pin ,i],3])
|
|
#print("Prüfer sagt JA, Observer sagt NEIN");
|
|
|
|
logs["errorcode"] = 10
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except:
|
|
logs["errorcode"] = 13
|
|
array["logs"] = logs
|
|
array["data"] = data
|
|
json_output = json.dumps(array)
|
|
print(json_output)
|
|
|
|
|
|
|
|
|