String - Char dönüşümü
  • Merhabalar, herkese kolay gelsin arkadaşlar, arduino programlama konusunda yeni sayılırım ve şöyle bir problemim var. Aşağıdaki gibi RF vericiden gelen veriyi tek tek string e dönüştürüp mesaj değişkenine aktarılıyor,mesaj içinde string veri var ve bunu string olarak kullanabiliyorum. Fakat string mesaj ile char *plaka yı nasıl eşitleyebilirim acaba? aşağıdaki gibi *plaka=mesaj olunca string-char veri tipi hatası veriyor,

    yani mesaj daki veriyi *plaka ya atamak istiyorum, bunu yapmak için string i tekrar char a dönüştürmeliyim yoksa gelen veriyi hiç birleştirme yapmadan plaka değişkenine mi aktarmalıyım? hangi fonksiyonlarla yapabilirim

    if(vw_get_message(buf, &buflen))
    {
    for(i; i < buflen; i++)
    {
    c=char(buf [ i ] );
    s=String(c);
    mesaj+= s;
    }
    Serial.println(mesaj);
    }

    const char *plaka = mesaj; //??????????

    const char *dplakalar[] =
    {
    "54AKM01",
    "54AKM02",
    "54AKM03"
    }

    for (x = 0; x < len; x++)
    {
    if (strcmp (plaka, dplakalar[x]) == 0)
    {
    Gecerli_Plaka();
    break;
    }


  • yokmu yardımcı olacak bir arduino programcı:))
  • if (buf.indexOf("54AKM01") >=0) { Gecerli_Plaka();}
  • sayın okoman cevap için teşekkürler, yalnız rf vericiden aldığım veriyi dplakalar dizisinde varmı diye sorgulamak ve sonucuna işlem yaptırmak istiyorum. yukarıdaki kodlarla sorgulamada plaka="54AKM01" şeklinde olunca sıkıntı yok, ama plaka verisi sabit olmayıp vericiden değişen veri alıp bir kaç tane farklı plakalar dizilerinde arama yaptırmayı düşünüyorum. onun için rf den alınan veriyi plaka değişkenine nasıl atayabilirim acaba?
  • vericiden aldıgınız veriyi string içinde biriktirmiyormusunuz zaten. rf okudugunuza gore tek karakter gelmiyordur her okudugunuzu bır stirnge sırasıyla koyun sonra yukarıdaki gibi karşılaştırın.
  • senin işini .c_str(); halledecektir.

    const char *dplakalar = mesaj.c_str();
    vw_send ((byte*)dplakalar, strlen(dplakalar));
    vw_wait_tx();

    mesaj değişkeninin String olması gerekiyor.
    /////////////////////////////////////////////////

    alıcı kısmındaysa;

    String mesaj;
    char c;

    byte buf [VW_MAX_MESSAGE_LEN];
    byte buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf,&buflen))
    {
    for (int i=0; i {
    c = char (buf[i]);
    mesaj = mesaj + String(c);
    }

    Serial.println (mesaj);
    demen yeterlidir.

    şayet "ben string değil karşılaştırmak için sayı kullanacağım" dersen

    float sayi;
    sayi = mesaj.toFloat();

    bunlar işini görür zannımca.
  • merhabalar, projemi teslim ettim ve derece aldım, yardımı edenlere teşekkür ederim, arduino forum, paylaştıkça güzel :)

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.