LM35 ile HC SR04 Aynı Arduino'dan C# Veri Gönderimi
  • Merhabalar

    Bir arduino projesi ile LM35 ölçüm yapabiliyorum. Diğer arduino projesi ile HC SR04 üzerinden mesafe ölçümü yapabiliyorum. İki projeyi birleştirmek istiyorum. C# kısmını arduinoları ayrı ayrı yükleyerek çalıştırabiliyorum. Butona basıyorum, sıcaklığı okuyor. Butona basıyorum mesafe ölçüyor. Birleştirmeyi Arduino kısmında yapamadım. Her iki proje de "if(Serial.available()>0)" başlayıp "Serial.println" ile değişkenleri gönderiyorum. İki uygulamayı arduino da birleştirip c#' a değerleri nasıl gönderebilirim?
  • arduinodaki kodların nasıl çalıştıgını anlamanız lazım yoksa kopyala yapıştırla olmuyor. program yazmayı da bılmek gerekıyor
  • Lütfen yazmış olduğunuz yorumlar daha yapıcı ve çözüm odaklı olsun. Yağtığınız yorumu tüm sorulan sorulara cevap diye gönderebilirim. Kime ne yarar sağlar?
  • iki programın setup kısımlarındakıleri bır arada yazın kutuphaneler varsa ıncludelar onlarıda ekleyın. loop kısmı ıcındekıler bellı olmaz ornek progrmda ayıklama yapmanız lazım. kullandıgınız nesnenın ozellıklerını nasıl oldugunu bılmenız lazım dememın sebebi o.
  • Cevabınız için çok teşekkür ederim. Set up kısmı ile ilgili bir problem yaşamadım. Loop kısmında LM 35' ten gelen sıcaklık değerini 't' gibi bir değişkene gönderiyorum. HC-SR04
    sensöründen gelen mesafe bilgisini 'a' diye diye bir değişkene atıyorum. Bu iki değişkeni Bilgisayara gönderemedim. Denediğim yöntem şuydu,

    void loop ()
    {
    if(Serial.available())
    {
    x=Serial.read();

    if(x='a');
    {
    //Mesafe ölçüm kodları
    }

    if(x='t');
    {
    //Sıcaklık ölçüm kodları
    }
    }
    }

    Arduino hata uyarısı vermedi. Fakat C# ta da ne sıcaklık, ne de mesafe ölçümü yapamadım.
    Aynı C# arayüzünde arduino da sensörleri birleştirmeden ayrı ayrı çalıştırdığımda sorunsuz sıcaklık ve mesafe ölçümü yapabildim.
  • Amacınız iki veriyi birlikte göndermek mi
  • Eğer öyleyse akşama doğru detaylı bir şekilde yardımcı olabilirim
  • Evet musaunal. Amacım hem lm35 ten gelen sıcaklık verisini göndermek, hem de hc sr04 ten gelen mesafe bilgisini birlikte göndermek.
  • Şimdi öncelikle değerleri nasıl okuyacağımıza bakalım. Bizim okuduğumuz değerler tanımladığımız itibari ile integer yani tamsayı.
    Örneğin:
    int sicaklik = analogRead(A0);
    int isik = analogRead(A3);

    Buradan int değerler aldık ama bizim karşı tarafa bunların ikisini birlikte göndermemiz gerekiyor. Bunun için şöyle bir yöntem kullanabiliriz:

    deger1+"/"+deger2


    Burada yaptığımız iki değerin arasına bir slash koyarak karışmalarını engellemek. Bunu yapmak için öncelikle int değerlerimizi stringe çevirmemiz ve ardından slashı eklememiz gerekiyor. Bunun için yapacağımız:

    String datas = String(sicaklik);
    String datai = String(isik);

    String data = datas+"/"+datai; //Gönderilecek değerimiz

    ***********************************************************
    Şimdi iyi güzel bunları bu şekile getirdik ama c# da ne yapacağız. Burada zaten seri porttan okuma işini halletmişsiniz sanırım. Serial port readline ile okuduğumuz değerler bize string döndürür. Bunu okuduk ve örneğin bize 15/20 gibi bir değer geldi. Bu nasıl ayıracağız. C#'da split diye bir fonksiyon varki tam bizim yapacağımız için uygun. Bi örnekle açıklayalım hemen:

    string data = "15/20";
    string[] splittedData = data.Split('/');
    Console.WriteLine(splittedData[1]);

    Elimizde bir string var bunu / 'lardan ayırmak istiyoruz. bunun için öncelikle bir array oluşturuyoruz bunları depolayabilmek için ardından ayırmak istediğimiz stringi yazıp .Split(ayırmak istediğimiz karakter yapıyoruz) ve artık değerlerimiz ayrı bir şekilde splittedData'nın içindeler ilk elemanı kullanmak için splittedData[0] ikinci elemanı kullanmak içinde splittedData[1] yapabiliriz.

    Kolay gelsin umarım yardımcı olabilmişimdir.
  • musaunal detaylı anlatımınız için teşekkür ederim. Bahsettiğiniz yöntem mevcut program yapısını tamamen değiştiriyor. Sistemi bu şekilde kurduğumda HC-SR04' ten 2 dijital çıkış (Echo ve Trig), LM 35 ten de bir tane analog çıkış alınması gerekecek. Dijital pinler için de benzer mantıkla digitalRead komutunu kullanmak gerekecek. İncelediğim örneklerde ya hepsi birden çok analog çıkış ya da birden çok sayıda dijital çıkış alıyordu. Acaba hem analog hem dijital aynı anda olacak mı? Uygun bir zamanda deneyeceğim.

Howdy, Stranger!

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

Login with Facebook

Tagged

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