from machine import Pin
import time
# Definition der Pins
DATA_PIN = 21 # Q7 pin of 74HC165
CLOCK_PIN = 18 # CP pin of 74HC165 (Clock)
LOAD_PIN = 19 # PL pin of 74HC165 (Parallel Load)
CE_PIN = 35 # CE pin of 74HC165 (Clock Enable)
# Pin-Initialisierung
data_pin = Pin(DATA_PIN, Pin.IN)
clock_pin = Pin(CLOCK_PIN, Pin.OUT)
load_pin = Pin(LOAD_PIN, Pin.OUT)
ce_pin = Pin(CE_PIN, Pin.OUT)
# CE auf LOW setzen, um das Schieberegister zu aktivieren
ce_pin.value(0)
clock_pin.value(1)
load_pin.value(1)
# Funktion zum Lesen der Tasten
def read_buttons():
button_state = 0
# Laden des aktuellen Zustands der Tasten
load_pin.value(0)
time.sleep_us(10)
load_pin.value(1)
# Lesen der seriellen Daten vom 74HC165
for i in range(8):
clock_pin.value(0)
time.sleep_us(10)
bit_value = data_pin.value()
button_state |= (bit_value << (7 - i))
clock_pin.value(1)
time.sleep_us(10)
return button_state
# Funktion zur Entprellung
def debounce_read_buttons():
stable_state = read_buttons()
time.sleep(0.05) # 50 ms Entprellungsverzögerung
new_state = read_buttons()
if stable_state == new_state:
return stable_state
else:
return debounce_read_buttons()
# Variable zum Speichern des vorherigen Zustands
previous_state = read_buttons()
while True:
buttons = debounce_read_buttons()
if buttons != previous_state:
# Einzelne Tastenänderungen erkennen
for i in range(8):
current_bit = (buttons >> i) & 1
previous_bit = (previous_state >> i) & 1
if current_bit != previous_bit:
if current_bit == 1:
print(f"Button {i} pressed")
else:
print(f"Button {i} released")
# Adressierung der Buttons und entsprechende Aktionen
if buttons & 0b00000001: # Prüfen ob Button 0 (Bit 0) gedrückt ist
print("Action for Button 0")
if buttons & 0b00000010: # Prüfen ob Button 1 (Bit 1) gedrückt ist
print("Action for Button 1")
previous_state = buttons # Aktualisierung des vorherigen Zustands nach der Erkennung der Änderungen
print("Button state changed to: {:08b}".format(buttons))
time.sleep(0.1)