myserial.listen(); kullanımı
  • Merhaba Arkadaşlar,
    Arduino nano ile SoftwareSerial kullanarak 3 adet cihazdan veri okumam gerekiyor.
    myserial.listen(); fonksiyonunu aşağıdaki gibi kullanıyorum fakat bir türlü haberleşemedim. Yardımcı olabilir misin?

    Arduino_1: Sıcaklık bilgisini serialden gönderiyor bunun gibi 2 adet daha var.
    #include < LiquidCrystal.h>
    int lm35Pin = A0;
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    void setup()
    {
    Serial.begin(9600);
    lcd.begin(16, 2);
    analogReference(INTERNAL);
    lcd.print("Sicaklik Olcumu:");
    }

    void loop()
    {
    int sicaklikVolt = analogRead(lm35Pin);
    float sicaklikC = sicaklikC = sicaklikVolt / 9.31;
    lcd.setCursor(0, 1);
    lcd.print(sicaklikC);
    lcd.setCursor(6,1);
    lcd.print("\337C");
    Serial.print(sicaklikC);
    delay(100);
    }

    //***************
    Alıcı Arduino:

    #include < SoftwareSerial.h>
    #include < LiquidCrystal.h>

    SoftwareSerial mySerial1(6, 7); // RX, TX
    SoftwareSerial mySerial2(4, 5); // RX, TX
    SoftwareSerial mySerial3(2, 3); // RX, TX

    float Temp1=0;
    float Temp2=0;
    float Temp3=0;

    // LiquidCrystal lcd(RS, E, D4, D5, D6, D7)
    LiquidCrystal lcd(11, 12, 16, 17,18, 19);

    void setup()
    {
    Serial.begin(9600);
    mySerial1.begin(9600);
    mySerial2.begin(9600);
    mySerial3.begin(9600);

    lcd.begin(20, 4);
    lcd.print("Sicaklik Okuma");
    }

    void loop()
    {
    mySerial1.listen();
    while (mySerial1.available() > 0)
    {
    Temp1 = mySerial1.read();
    lcd.setCursor(0, 1);lcd.print("Temp1:");lcd.print(Temp1);
    }

    mySerial2.listen();
    while (mySerial2.available() > 0)
    {
    Temp2 = mySerial2.read();
    lcd.setCursor(0, 2);lcd.print("Temp2:");lcd.print(Temp2);
    }

    mySerial3.listen();
    while (mySerial3.available() > 0)
    {
    Temp3 = mySerial3.read();
    lcd.setCursor(0, 3);lcd.print("Temp3:");lcd.print(Temp3);
    }
    delay(100);
    }

    Bu şekilde sıcaklıkları okuyamadım, nerde yanlış yapıyorum bir türlü çözemedim. Yardımcı olur musunuz?
  • birisini listen yaparken , diğerini stoplamanız gerekmiyor mu acaba ? , ben daha önce 2 serial kullanırken öyle yapmıştım çünkü.
  • 2.arduino da 2 ve 3.bacakları hem serialde hemde lcd .de kullanmissiniz hata mesajı vermedi mi?
  • @bsenguler : uyarı için teşekkür ederim Hocam, LCD bacaklarını yanlış yazmışım düzelttim.

    @EmbeddedSystem: Hocam stoplamak gerekmiyor diye biliyorum ama denemek için sadece aşağıdaki gibi kod yazdım fakat while içerisine hiç girmiyor.


    void loop()
    {
    mySerial1.listen();
    while (mySerial1.available() > 0)
    {
    lcd.setCursor(0, 1);lcd.print(mySerial1 Okunuyor..");
    Temp1 = mySerial1.read();
    lcd.setCursor(0, 2);lcd.print("Temp1:");lcd.print(Temp1);
    }
    }
  • Bir de NewSoftSerial.h kütüphanesini kullanır mısın?
  • s.a Hocam,
    Aşağıdaki gibi hata verdi ve dosyayı birtürlü derleyemiyorum.

    E:\Dokumanlarim\Ardunio\arduino-nightly-windows\arduino-nightly\libraries\NewSoftSerial-master/NewSoftSerial.h:33:2: error: #error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead.

    #error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead.
  • NewSoftSerial, SoftSerial ın içine taşınmış, benim hatam kusura bakmayın.
  • mySerial1'e ne bağlı, eğer veri gelmiyorsa while içine girmez.
  • 1sn ara ile ikinci bir arduinodan veri gönderiyorum.
    standart seriport kullandığımda sorun yok çalışıyor ( standar seriport da listen yok ) fakat softserial kullanınca aşağıdaki kod çalışmıyor

    void loop()
    {
    mySerial1.listen();
    while (mySerial1.available() > 0)
    {
    lcd.setCursor(0, 1);lcd.print(mySerial1 Okunuyor..");
    Temp1 = mySerial1.read();
    lcd.setCursor(0, 2);lcd.print("Temp1:");lcd.print(Temp1);
    }
    }
  • Peki bu kodu lcd ye bastırmak yerine konsola yazmayı denediniz mi?
  • Evet hocam denedim.
    Hem gercek ortamda hemde protesto ama sonuç aynı malesef.
  • benim anlamadığım neden 2 tane arduino kullandın?
    lm35 ile analog ölçüm yapıp aynı arduino ile ekrana yazdırabilirdin.

    hadi sen 2. arduinoya göndermek istiyorsun. 1. arduinodan 2.ye fiziksel bağlantın nerede? hangi ucu sen dinleyip de verinin geldiğini gördüğünü umuyorsun?

    sen ilk kodda sadece seri monitörden ekrana yazdırmışsın.
  • @wijippo : Hocam,
    İlk kod ile ( 1 arduino için bu kod ) 3 adet arduinodan harware serial ile ana karta gönderiyorum. ( bu kartdan 3 adet var ve farklı yerden değer okuyup ana karta gönderecek ) Anakardan da 3 adet softserial ile bu 3 arduinodan gelen verileri .listen() fonksiyonuile portları tarayarak okumak istiyorum.
  • Arduino nun kendi sitesinde aynı anda sadece 1 port dinlenebilir diyor, Volkan'in dediği gibi yapman daha yerinde olacaktır.
  • seri uzerınden bırden fazla nesne olacaksa rs485 ıle yapın o zaman 60 tane cıhaz haberleşebılır. tabı buna uygun protokolu de yazmanız lazım. her noktanın bır id si olacak ve iletişim yaparken from-to-data gibi bir fortmatta veri taşınması lazım kabloda. yada serialden yapacaksanız tum cıhazlar okumada bekleyecem master cıhaz tek tek soracak bılgıyı alacak. bunun dışındakı yontem ıse zaman paylaşımlı verı transferı yapmanız lazım bunun da protokolu yazman lazım.
  • Tama hocam rs 485 ile yapayım, Cihaz ID si olmadan seriportları dinleyerek yapayım demiştim ama sanırım rs-485 ile devam edeceğim.
    İlginiz için tüm arkadaşlara teşekkür ederim.

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.