from gpiozero import Button
from time import sleep

button = Button(18)


def decode_binary_message():
    message = ''  # Uchovává dekódovanou zprávu
    current_byte = ''  # Uchovává aktuální bajt během příjmu
    print("Čekám na signál...")

    while True:  # Nekonečná smyčka, která neustále čeká na signály z fotorezistoru
        try:
            if button.is_pressed:  # Kontroluje, jestli fotorezistor) detekuje signál
                sleep(0.03)
                if button.is_pressed:  # Pokud signál stále trvá, považuje se za '1'
                    current_byte += '1'  # Přidá '1' do aktuálního bajtu
                else:
                    current_byte += '0'  # Jinak přidá '0' do aktuálního bajtu
                sleep(0.1)  # Pauza mezi jednotlivými bity
            else:
                # Pokud není detekován signál, kontroluje, zda byl přijat celý bajt (8 bitů)
                if len(current_byte) == 8:
                    try:
                        character = chr(int(current_byte, 2))  # Převádí binární řetězec na znak
                        message += character  # Přidává dekódovaný znak do zprávy
                        print(f"Dekodovany znak: {character}")  # Vypíše dekódovaný znak
                    except ValueError:
                        # Pokud binární řetězec není platný, vypíše chybu
                        print("Chyba dekodování byte:", current_byte)
                    current_byte = ''  # Vyčistí aktuální bajt pro další příjem
        except KeyboardInterrupt:  # Zpracovává výjimku při stisknutí Ctrl+C (ukončení programu)
            print("\nDekodovaní se ukončilo.")  # Vypíše informaci o ukončení dekódování
            print(f"Zpráva: {message}")  # Vypíše dosud přijatou zprávu
            break  # Ukončí smyčku


if __name__ == "__main__":
    decode_binary_message()
