Python ile RS232 üzerinden string gönderme

Başlatan Yeniüye1234, 08 Haziran 2022, 22:20:22

Yeniüye1234

Arkadaşlar herkese selam. Python ile RS232 üzerinden PIC' e string ifade nasıl gönderebilirim? örnek verebilirseniz sevinirim. Karakter göndermede sorun yok ancak string ifade gönderme işlemi yapamadım. CCS C' de gets( ) komutunu kullandım.

    Örnek verecek olursam:     char gelen[ ];
                                               char veri[ ]="asd"
                                           ..........
                                          gets(gelen);
                                              if(strcmp(gelen,veri)==0)
                                               .........

                                        şeklinde yazdım. Ancak çalışmıyor. Python' dan string ifadeyi nasıl göndereceğim? CCS C ile nasıl alacağım? yardımcı olursanız sevinirim.


Yeniüye1234

Hocam teşekkür ederim ama başta gelen 'b' den dolayı PIC bunu algılamaz. Ben normalde karakterleri seriport.write("1".encode()) şeklinde gönderiyorum ve sorunsuz çalışıyor. ancak seriport.write("26".encode()) yazdığımda hiçbir işlem yapılmıyor.

muhittin_kaplan

string ardına \r\n koymayı deneyebilirsin.

Yeniüye1234


fide

.encode("utf8") deneyin.
Aldığınız string için de .decode("utf8") deneyin.

string = "abc".encode("utf8")
serial.write(string)

ESC kodu gönderecek sen ord(26) ord(27) dene
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

#6
Yalnız dikkat etmen gereken bir nokta var.
Serial.write(1)


ifadesi karşıya 0x00000001 gönderirken


string="1".encode('utf8')
serial.write(string )

İfadesi karşıya 0x00030001 gönderir.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

kudretuzuner

Merhaba, Pyhton dilini bilmiyorum ama PIC'e PC'den string yolladığımız zaman(dil önemli değil) veya her klavyeye bastığımızda PIC'te sadece stringin sıra ile giden HEX kodları görülmez mi? Teşekkürler.
Amatör

fide

Alıntı yapılan: kudretuzuner - 09 Haziran 2022, 13:41:33Merhaba, Pyhton dilini bilmiyorum ama PIC'e PC'den string yolladığımız zaman(dil önemli değil) veya her klavyeye bastığımızda PIC'te sadece stringin sıra ile giden HEX kodları görülmez mi? Teşekkürler.
Hocam hex kodları değil ama binary kod gidiyor. Bu yüzden 1'i sayı olarak gönderince b00000001 olarak gidiyor. 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan 49 değerini yazıyor. Bu da b00030001 değerine karşılık geliyor.
İki cihaz arasında text gönderirken sıkıntı yok ama sayı gönderirken buna dikkat etmek gerekir.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

kudretuzuner

Alıntı yapılan: fide - 09 Haziran 2022, 15:12:25Hocam hex kodları değil ama binary kod gidiyor. Bu yüzden 1'i sayı olarak gönderince b00000001 olarak gidiyor. 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan 49 değerini yazıyor. Bu da b00030001 değerine karşılık geliyor.
İki cihaz arasında text gönderirken sıkıntı yok ama sayı gönderirken buna dikkat etmek gerekir.
Merhaba, benim kafam yine karıştı 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan DEC 49 değerini yazıyor bu DEC değeridir. Ama PIC "ASCII değeri H'31' algılaması gerekmiyor mu? HEX'31' i b00030001 şeklinde algılaması demek ki benim PIC'teki bilmediğim bir özellikmiş. 
Amatör

Yeniüye1234

Hocam pythonda ...write("1".encode()) yazdığınızda karakter olarak 1 gönderiyor.

Bunu da CCS C de:   char data; // şeklinde bir değişken tanımladıktan sonra

                    data=getc();
                    if(data=='1')
                       ..............     şeklinde kontrol edildiğinde program sıkıntısız çalışıyor.

Peki pythondan "26" ifadesini nasıl göndereceğim? bunu CCS C ile nasıl alacağım? benim sorum bu. 

kudretuzuner

Merhaba, yukarıda da yazdığım gibi Python sintaksını bilmiyorum. Lâkin PIC'in anlıyacağı dili biliyorum. Siz 26 yı ister rakkam olarak kabul edin ister string olarak kabul edin PIC bunu ancak önce HEX'32' yani ASCII rakkam 2 olarak sonra da HEX'36'olarak algılayabilir diye biliyorum. Yani özetle PC'den MCU'ya 26 yollayabilmeniz için PC'de yazacağınız python programda HEX'32' ve de HEX'36' göndermeniz gerekir diye düşünüyorum.
Amatör

Yeniüye1234

#13
Şöyle sorayım: PIC' e string ifade gönderirken string ifade yazıldıktan sonra enter tuşuna basmak gerekiyor. CCS C' de gets( ); komutu ile string ifadeyi almak için Pythondan string ifadeyi nasıl gönderebilirim? 

kudretuzuner

Alıntı yapılan: eskişehir26 - 09 Haziran 2022, 21:10:06Şöyle sorayım: PIC' e string ifade gönderirken string ifade yazıldıktan sonra enter tuşuna basmak gerekiyor. CCS C' de gets( ); komutu ile string ifadeyi almak için Pythondan string ifadeyi nasıl gönderebilirim? 
Vallahi ne CCS C ne de python diline vakıf değilim. Ben PC'den PIC'e VB.Net 2010 express edition ile data yollamaktayım. PIC tarafında ise assembly dili ile gelen hex kodlarını görebilmekteyim. Arzu ederseniz 18F4550 ile yaptığım bir uygulamamın dosyasını yollayayım. Ama PC'den ASCII kodlarını hex olarak yollarsanız çevirme sıkıntısı olmadan direk PIC'te görebilmeniz lâzım.
Amatör