UART seri haberleşmede sorun yaşıyorum

Halilgok

Üye
Katılım
29 Haz 2019
Mesajlar
18
Puanları
1
Yaş
24
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);
 
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.
 
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ım
 
if ile de olamaz while ile bekleyeceksin.

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

yon=Serial.read();
 
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

  • massa2.JPG
    150.8 KB · Görüntüleme: 9
  • massa3.JPG
    100.4 KB · Görüntüleme: 8
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");
        }
    }
 
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
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…