UART seri haberleşmede sorun yaşıyorum

Halilgok

Üye
Katılım
29 Haz 2019
Mesajlar
16
Puanları
3
Yaş
19
C# üzerinden oluşturduğum form ile
1.durumda slave adresi yolluyorum eşit olup olmadığını kontrol ediyor (5.satırda) ve o durum sağlandı. eğer sağlandıysa ack gönderiyorum bilgisayara.
2.durumda c# formunda ack eşitliğini kontrol ediyor c# üzerinde bu durumda sağlanınca bilgisayardan seri porta yön değerini yolluyorum(10 veya 20) ama orada nedense okumuyor o değerleri ve bilgisayara nack yani okuyamadığını gönderiyor
bir şeyi eksik mi yapıyorum :) teşekkürler

Kod:
1) void loop() {
2) if (Serial.available() > 0) {
3) slaveadres=Serial.read();
4)
5) if(slaveadres==slave_kimlik)
6) { Serial.write(ACK);
7)
8) yon=Serial.read();
9) {
10) if(yon==10 || yon==20){
11) Serial.write(ACK);
12) digitalWrite(8,1); // motor çalışşın
13) motor_calistir(yon);
14)
15) }
16) if(!(yon==10 || yon==20))
17) {Serial.write(NACK);
18) digitalWrite(9,1);
 

silvestir

Uzman Üye
Katılım
10 Ağu 2011
Mesajlar
1,703
Puanları
208
8. Satırda birşey geldi mi diye kontrol etmeden okuma yapıyorsun. Daha senin ack PC ye ulaşmadan sen gelmeyen yanıtı okudun.
 
Konu Sah
Halilgok

Halilgok

Üye
Katılım
29 Haz 2019
Mesajlar
16
Puanları
3
Yaş
19
Haklısınız kodda tekrar tekrar değşiklik yaptım ancak 259. kod satırına geçmiyor yani hala yönü doğru bir şekilde okuyamadım55265
 

Ekli dosyalar

silvestir

Uzman Üye
Katılım
10 Ağu 2011
Mesajlar
1,703
Puanları
208
if ile de olamaz while ile bekleyeceksin.

While(!serial.available()); // gelen birşey yoksa burada dön.

yon=Serial.read();
 
Konu Sah
Halilgok

Halilgok

Üye
Katılım
29 Haz 2019
Mesajlar
16
Puanları
3
Yaş
19
hocam while ile bekleyince de sürekli nack gönderiyor c# o veriyi gönderiyor 10 veya 20 gönderecek zaten onuda ekledim 2.fotoda. neden okumuyor okuyup ifin içerisine giriip işlemleri yapması gerekiren mailden istersen kodlari atayim
 

Ekli dosyalar

  • 150.8 KB Görüntüleme: 6
  • 100.4 KB Görüntüleme: 6

Erdem⁣

Üye
Katılım
14 Ocak 2013
Mesajlar
415
Puanları
33
Yön değerini mantıksal VEYA || yapıyorsunuz.

Bu durumda hem 10 hem de 20 gönderdiğinizde her iki if bloğu da çalışacaktır.

Bunun yerine digitalWrite satırlarını yorum haline getirip ilk önce serial monitor'den gelen değerleri kontrol edebilirsiniz.

C++:
    yon = Serial.read();
    {
        // değişkenin değerini yazdırıp elimize ne geldiğini görmekte fayda
        // var
        Serial.write(yon);
        if (yon == 10)
        {
            Serial.write("Yon degeri 10");
        }
        else if (yon == 20)
        {
             Serial.write("Yon degeri 10");
        }
        else
        {
            Serial.write("Bir hata var");
        }
    }
 
Konu Sah
Halilgok

Halilgok

Üye
Katılım
29 Haz 2019
Mesajlar
16
Puanları
3
Yaş
19
arakdaşlar ilgilendiğiniz için teşekkür ederim While(!serial.available()); yazdıktan sonra sorunumu çözüldü. ama başka uğraşmam gerken sorunlarıda uğraşıp bitirdiğimde tam anlamıyla paylaşacağım teşekkürler
 

Sponsor Bağlantı

Forum istatistikleri

Konular
105,116
Mesajlar
740,262
Kullanıcılar
390,830
Son üye
Celikx

Yeni konular

Üst