Merhaba hepinize kolay gelsin elimde çok basit 4 bytelık bir veri var bunu pyserial ile gönderip karşılığında tekrar 1 byte okuma yapmaya çalışıyorum. Bu sırada bana geri dönen byte’ı doğru alıp almadığımı kontrol ediyorum ancak hiç birşey geri dönmezse otomatik olarak başlıkta belirttiğim hatayı alıyorum. Ancak hiç birşeyin gelip gelmediğini de if ile kontrol etmek istiyorum. Aşağıda denediklerimi paylaşıyorum;
if (len(test) ==0):
if (test==None):
if (test==0):
check=[]
check.append(test)
if (len(check) ==0):
if(test == "")
Bunların hiç biri işe yaramadı ve “Error in background function” başlıklı hata ekranı almaya devam ediyorum. Kendi kodumu paylaşıyorum yardımcı olursanız çok sevinirim.
def baglantı_ctrl():
test_data=[0x77, 0x01, 0xAA, 0x23]
basari = Label(root4, text="")
ser = serial.Serial(port.device, 300, serial.EIGHTBITS, serial.PARITY_NONE,
serial.STOPBITS_ONE, timeout=4)
i = 0
while i < 4:
ser.write(test_data[i:i + 1])
time.sleep(0.02)
i += 1
check=[]
test = ord(ser.read(1))
check.append(test)
if (test == test_data[3]) :
basari=Label(root4, text=" İşlem başarılı ", bg="green")
basari.place(relx=0.47, rely=0.01)
elif (test_crc != test_data[3]) or (len(check) == 0):
basari = Label(root4, text="Bağlantı gerçekleşmedi ", bg="red")
basari.place(relx=0.47, rely=0.01)
-test için değer karşı karttan bana dönüyor ve kodumun ilk if kısmında anlayacağınız üzere datamın son elemanının bana geri dönmesini bekliyorum
-ord() yapmadığım zaman görmek istediğim hex değeri gelmiyor açıkçası o nedenle ord() kullanıyorum
-type(test) yaptığımda bytes olduğunu gördüm
evet biliyorum sorumda tamda bu o hatayı if ile kontrol edip hiç bir data gelmediyse ekrana bağlantı gerçekleşmedi yazmaya çalışıyorum aslında ama ne geldiğini kontrol edebiliyorum, gelip gelmediğini kontrol edemiyorum
herhangi bir byte gelirse dediğiniz gibi sorunsuzca uzunluğunu kontrol edebildim ancak hiç bir byte geri dönmediği haliyle debug yaptığım zaman program ser.read(1)'den daha ileriye gitmiyor ne yazık ki bi alt satırları çalıştırmıyor bile dolayısıyla if ile hiç birşeyi kontrol edemiyorum “Error in background function” ekranını almaya devam ediyorum
tabi ki kopyala yapıştır yaparken girintileri bazen takip edemiyorum olabildiğince okunaklı atmaya çalıştım ama herhangi bir girinti hatası varsa buna takılmayın kodum epeyce uzun size sormaya çalıştığım kısmının tamamı burası ana pencereden sonra açılan bir toplevel üzerinden bu işlemleri yapıyorum. aldığım hata ekranınıda paylaşıyorum
Bu paylaştığım kodlar ilk butonum için yapmak istediklerim görmek istediğim aslında bu ekran ancak bunu sadece karşı taraftan yanlış bir byte geldğinde görebiliyorum;
üstelik hem içeriği hem uzunluğu kontrol etmek istiyorum sadece len(ser.read(1)) yaparsam sadece uzunluk değeri tutarım içeriği ord() fonksiyonu ile tekrar bakmam gerekir ama ikinci kez ord(ser.read(1)) yapamam 2 kere byte gelmiyor karşı taraftan bana
tamam çözdüm uzunlukla kontrol etmekte aynı sıkıntıyı yaratıyor ancak ìf(test != b'') şeklinde kontrol yapmak mümkünmüş bilginiz olsun sizin de çok teşekkür ederim uğraşınız için