folder Tahribat.com Forumları
linefolder C - C++
linefolder Mikro C ARM Uart Sorusu?



Mikro C ARM Uart Sorusu?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    1234567B
    1234567B's avatar
    Kayıt Tarihi: 04/Şubat/2010
    Erkek

    Arkadaşlar Öncelikle Merhabalar,

    MikroC ve armstm32f0 ile bir araç kontrol projemiz var.Hexadecimal olarak uarttan gelen veriyi başarılı bir şekilde okuyabiliyorum.Fakat bilgisayar arayüzünden YaV1 gibi bir string gönderdiğimizde bunu ayıklamakta güçlük çekiyoruz.İstediğimiz şey ise şu Y yönü ifade etmekte ardından gelen a sol s gelirse geri,w ileri,d sağ.V ise vitesi 4 vites var V den sonra gelen rakamlar için 1 den 4 e kadar pvm değişiyor.Php'deki gibi bir substr oluşturamıyorum.Tecrübesi olan arkadaşlar yardımcı olursa sevinirim.İyi Çalışmalar.


    arbeit macht frei
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    string olarak mı alıyorsunuz hocam yoksa byte dizisi mi? neyse sonuç olarak string de bir dizidir (char dizisidir) bu şekilde dizinin elemanlarına ulaşarak ayıklama yapabilrisn

     

    gelenveri[0] --> Yön gösteriyor

     

    if(gelenveri[0] == 'Y')  // yön ise
    
    {
    
         switch(gelenver[1]) // sağ-sol-yukarı aşağı kontrol için
    
         {
    
             case 'a' :  //sol
    
            break;
    
             case 's' :  //geri
    
            break;
    
            case 'd' :  //sağ
    
          break;
    
            case 'w' : //ileri
    
           break;
    
          }
    
    }
    
    else  //yöndeğilse
    
    {
    
    }
    
     
    
    if(gelenveri[2] == 'V') // hız ise
    
    {
    
      int hiz = gelenveri[3];
    
    }
    

      

    gibi bir mantıkla ilerleyebilirsin. bunu ben  char dizisi olarak düşündüm. eğer byte dizi alıyorsan o zaman tür dönüşümü yapman gerek (char a cast edeceksin)

    bir de strstr fonksiyonu var. şöyle bir örnek buldum

    char txt = "mikroElektronika";
    char txt_sub = "mikro";
    char *res;
    
    res = strstr(txt_sub,txt);
    

     

    burdan detayına bakabilirsin

     

    http://www.cplusplus.com/reference/cstring/strstr/

    ama gelen string verilerinde benzerlik varsa yani V harfini başka şeylerde de kullanıyorsan bu tarz bir şey kullanman karışıklığa yol açacaktır

     

    unbalanced tarafından 26/Nis/14 00:05 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    1234567B
    1234567B's avatar
    Kayıt Tarihi: 04/Şubat/2010
    Erkek
    unbalanced bunu yazdı

    string olarak mı alıyorsunuz hocam yoksa byte dizisi mi? neyse sonuç olarak string de bir dizidir (char dizisidir) bu şekilde dizinin elemanlarına ulaşarak ayıklama yapabilrisn

     

    gelenveri[0] --> Yön gösteriyor

     

    if(gelenveri[0] == 'Y')  // yön ise
    
    {
    
         switch(gelenver[1]) // sağ-sol-yukarı aşağı kontrol için
    
         {
    
             case 'a' :  //sol
    
            break;
    
             case 's' :  //geri
    
            break;
    
            case 'd' :  //sağ
    
          break;
    
            case 'w' : //ileri
    
           break;
    
          }
    
    }
    
    else  //yöndeğilse
    
    {
    
    }
    
     
    
    if(gelenveri[2] == 'V') // hız ise
    
    {
    
      int hiz = gelenveri[3];
    
    }
    

      

    gibi bir mantıkla ilerleyebilirsin. bunu ben  char dizisi olarak düşündüm. eğer byte dizi alıyorsan o zaman tür dönüşümü yapman gerek (char a cast edeceksin)

    bir de strstr fonksiyonu var. şöyle bir örnek buldum

    char txt = "mikroElektronika";
    char txt_sub = "mikro";
    char *res;
    
    res = strstr(txt_sub,txt);
    

     

    burdan detayına bakabilirsin

     

    http://www.cplusplus.com/reference/cstring/strstr/

    ama gelen string verilerinde benzerlik varsa yani V harfini başka şeylerde de kullanıyorsan bu tarz bir şey kullanman karışıklığa yol açacaktır

     

    Hocam problemimiz kontrolde değil.Aracı zaten stabil olarak çok güzel kontrol ediyoruz.a w s d gibi değer gönderdiğimizde.Biz aracı YaV1 geldiğinde 1.viteste a yönüne gitsin istiyoruz.Fakat gelen veriyi hiçbir şekilde ayıklayamıyoruz.4 elemanlı bir diziye atsak bile kafi ama beceremedik.strstr baya bir kurcaladım.Onunlada bir sonuç elde edemedik.


    arbeit macht frei
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam yukarıda yazdığım kodu deneme şansım yok elle yazdım ama bu mantıkla gideceksiniz.. vites ile yön verme olayını muhtemelen farklı pinlerde yapıyorsunuz. ilk if e girdiinde yön olayı için ilgili pin e çıkış verirsin, ikinci if e girdiğinde vites ile ilgili olana.. aslında bu kodu sıfır bir projeye aktarıp kendinizce bir test edin çalıştığını görürsünüz sonra kendinize göre uyarlayın


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    1234567B
    1234567B's avatar
    Kayıt Tarihi: 04/Şubat/2010
    Erkek
    unbalanced bunu yazdı

    hocam yukarıda yazdığım kodu deneme şansım yok elle yazdım ama bu mantıkla gideceksiniz.. vites ile yön verme olayını muhtemelen farklı pinlerde yapıyorsunuz. ilk if e girdiinde yön olayı için ilgili pin e çıkış verirsin, ikinci if e girdiğinde vites ile ilgili olana.. aslında bu kodu sıfır bir projeye aktarıp kendinizce bir test edin çalıştığını görürsünüz sonra kendinize göre uyarlayın

    Farklı pinler yok hocam.Xbee ile haberleşiyor.
    char okunan=Uart2_read();
    
    ile gelen veriyi okuyoruz.Örneğin "YaV1" gibi bir değer göndereyim.Okumak için tek fonksiyon var ve gelen verilerin hepsini bu kanal üzerinden yollamak zorundayım.
    İstediğim
    Komut adında bir dizi değişken olsun.
    Komut[0]="Y";
    
    Komut[1]="a";
    
    Komut[2]="V";
    Komut[3]="1";
    
    gibi ayıklamak istiyorum.Problemim ayıklamada aracı kontrol etmekte değil.

    arbeit macht frei
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam özelden teamviewer bilgisini yolla bağlanıp bakayım istersen


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    1234567B
    1234567B's avatar
    Kayıt Tarihi: 04/Şubat/2010
    Erkek
    unbalanced bunu yazdı

    hocam özelden teamviewer bilgisini yolla bağlanıp bakayım istersen

    Çalıştığım bilgisayar Labda evde değil malesef


    arbeit macht frei
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    tamam hocam ben sana teamviewer vereyim bi kod yazalım orada baklım


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek

    hocam o gibi diye gösterdiğin ayırması gerekiyor sanırım, önceden yaptığım bişey vardı bunun benzeri ancak bulamadım kurcalıyorum bulursam yollarım

    char okunan[]=Uart2_read();  fln yapsan yemezmi ? sonra 0 ına 1 ine filan baksan

    hocam 
     uart1_read_text() diye fonksiyonda varmış bunu dene birde pointerlı arraya at 

    detCode tarafından 26/Nis/14 01:08 tarihinde düzenlenmiştir

    Who is detCode?
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    @detcode, hocam arkadaş bağlandı bilgisayarıma baktık biraz.

    Uart2_read fonksiyonu byte byte dönderiyor. yani bir döngü içerisinde tek tek okumak gerekiyor ve char dizi değil de char olarak veriyor. 

    bahsettiğin uart1_read_text fonksiyonunu da arkadaşa tavsiye ettim, bununla daha kolay şekilde çözülür. 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1996 Toplam Mesaj: 10