import RPi.GPIO as GPIO
import time
import lcd # Stellen Sie sicher, dass Sie ein LCD-Modul verwenden, das diese Bibliothek unterstützt.
# GPIO-Pins
IR_RECEIVER_PIN = 26 # IR-Receiver
LCD_RS = 7 # LCD Register Select
LCD_E = 6 # LCD Enable
LCD_D4 = 5 # LCD Data Pins
LCD_D5 = 4
LCD_D6 = 3
LCD_D7 = 2
# Morsecode-Tabelle (umgekehrte Zuordnung von Zeichen zu Morsecode)
MORSE_CODE_REVERSE = {v: k for k, v in {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
'Z': '--..', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...',
'8': '---..', '9': '----.', '0': '-----', ' ': '/'
}.items()}
# GPIO initialisieren
GPIO.setmode(GPIO.BCM)
GPIO.setup(IR_RECEIVER_PIN, GPIO.IN)
GPIO.setup(LCD_RS, GPIO.OUT)
GPIO.setup(LCD_E, GPIO.OUT)
GPIO.setup(LCD_D4, GPIO.OUT)
GPIO.setup(LCD_D5, GPIO.OUT)
GPIO.setup(LCD_D6, GPIO.OUT)
GPIO.setup(LCD_D7, GPIO.OUT)
lcd = lcd.LCD() # LCD-Objekt erstellen
def decode_signal(signal_sequence):
"""Dekodiert eine Sequenz von Morsezeichen."""
decoded_message = ""
for signal in signal_sequence.split('/'):
decoded_message += MORSE_CODE_REVERSE.get(signal, '?') # '?' für unbekannte Zeichen
return decoded_message
def listen_for_message():
"""Erfasst und dekodiert Morsecode von IR-Signalen."""
signal_sequence = ""
while True:
if GPIO.input(IR_RECEIVER_PIN) == GPIO.LOW: # Signal erkannt
start_time = time.time()
while GPIO.input(IR_RECEIVER_PIN) == GPIO.LOW:
pass
duration = time.time() - start_time
if duration < 0.4:
signal_sequence += "." # Kurzes Signal
elif duration < 0.8:
signal_sequence += "-" # Langes Signal
else:
signal_sequence += "/" # Trennung zwischen Buchstaben
else:
time.sleep(0.1)
if len(signal_sequence) > 0:
break
return decode_signal(signal_sequence)
try:
while True:
print("Listening for IR messages...")
message = listen_for_message()
print(f"Received message: {message}")
lcd.clear()
lcd.display_message(message) # Auf dem LCD-Display anzeigen
except KeyboardInterrupt:
print("Exiting.")
finally:
GPIO.cleanup()