Python ile seri porta yazma okuma

Başlatan elektronikhobi, 10 Haziran 2025, 15:51:33

elektronikhobi

Python ile klavyeden girilen tuşu okuyabiliyoruz.

Güzel.

Seri porta yazabiliyoruz.

O da güzel.

Peki.

Klavye girişini okusun. Seri porta yazsın. Seri porttan da okusun.

O da iş parçacığı kullanarak oldu gibi gözüküyor.  ;) 

import serial
import time
import threading
import queue

from pynput.keyboard import Key, Listener

seri = serial.Serial('/dev/ttyACM0', 9600)

def yaz(karakter):
    kaçBaytYazıldı = seri.write(karakter.encode())
    print('Kaç bayt yazıldı = ', kaçBaytYazıldı)

def girişiİşle(tuş):

    if tuş == Key.up:
        print('\nİleri gidiyoruz')
        yaz('ileri')

    if tuş == Key.down:
        print('\nGeri gidiyoruz')
        yaz('geri')

    if tuş == Key.right:
        print('\nSağa dönüyoruz')
        yaz('sag')

    if tuş == Key.left:
        print('\nSola dönüyoruz')
        yaz('sol')

    if tuş == Key.space:
        print('\nDuruyoruz')
        yaz('dur')

    if tuş == Key.shift:
        print('\nHızlanıyoruz')
        yaz('hizlan')

    if tuş == Key.ctrl:
        print('\nYavaşlıyoruz')
        yaz('yavasla')

    if tuş == Key.delete:
        return False

def tuşaBasıldı(tuş, tuşKuyruğu):
    tuşKuyruğu.put(tuş)

def tuşOku(tuşKuyruğu):

    klavyeOkuyucu = Listener(
        on_press=lambda tuş: tuşaBasıldı(tuş, tuşKuyruğu)
    )

    klavyeOkuyucu.start()

def ana():
    tuşKuyruğu = queue.Queue()
    giriştenOku = threading.Thread(target=tuşOku,
                                   args=(tuşKuyruğu,),
                                   daemon=True)
    giriştenOku.start()

    while (True):
        if (tuşKuyruğu.qsize() > 0):
            okunanTuş = tuşKuyruğu.get()
            # Girişi işle
            girişiİşle(okunanTuş)

        # Programın kalanı
        if (seri.inWaiting() > 0):
            okunan = seri.read(seri.inWaiting()).decode('utf-8')
            if okunan == b"" and seri.poll() != None:
                break
            if okunan != b"":
                print(okunan, end='')

        time.sleep(0.01)

if (__name__ == '__main__'):
    ana()

Benzer Konular (5)