Arduino serial available hakkında

Başlatan ds01, 20 Ağustos 2015, 15:37:17

ds01

İyi günler bu arduinoda Serial.available(), bluetooth.available(),  x.available() tarzında ifadeler kullanılıyor.Ne amaçla kullanılıyor.Kullanılmasının sebebi nedir tam olarak anlayamadım.Birde bazı yerlerde örneğin Serial.available()>12(herhangi bir sayı olabilir.)  gibi ifadeler geçiyor.Epey araştırdım fakat tatmin edici bir cevap bulamadım.Son olarak TX RX pinleri yerine arduinodaki herhangi bir pini TX RX yapabiliyoruz.Gerçek TX RX ile normal bir pinin TX RX olmasının ne farkı var.Yardımcı olabilirseniz çok sevinirim

Gökhan BEKEN

#1
https://www.arduino.cc/en/Serial/Available

Rx buffer'ında veri var mı diye kontrol ediyor

dönüş değeri ise
Alıntı Yap"Returns

the number of bytes available to read"

yazdığı üzere kaç byte veri varsa o dönüyor

void loop() {
        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}
Özel mesaj okumuyorum, lütfen göndermeyin.

ds01

#2
Çok teşekkür ederim.Peki yazılımsal olarak aşağıdaki gibi RX,TX pini(SoftwareSerial bluetooth(10, 11)) ayarlamamızın sebebi nedir?Hatların karışmaması amacıyla mı böyle birşey yapılıyor.Örneğin arduinodan bilgisayara veri geliyor hemde bluetoothtan arduinoya veri gidiyor.
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(10, 11); // RX, TX

void setup()
{
  
  Serial.begin(9600);
  bluetooth.begin(9600);
  pinMode(5, OUTPUT);
  while (!Serial) {
    ; 
  }
}


void loop() {

  if(bluetooth.available()>0) 
{
      char c = (char)bluetooth.read();
}

Gökhan BEKEN

Software yani yazılımsal seriport kullandığınız için, herhangi bir sebebi yok istediğiniz pine ayarlayabilirsiniz.
Eğer donanımsal seriport kullansaydınız mcu'nun datasheet'inde yazan pinlerden başka bir yeri kullanamazdınız.
Neden software kullandınız, genelde donanımsal pini başka bir iş için kullanmak zorunda iseniz kullanırsınız ama sizin öyle bir durumunuz yok sanırım.
Özel mesaj okumuyorum, lütfen göndermeyin.

ds01

Alıntı yapılan: Gökhan BEKEN - 20 Ağustos 2015, 18:39:03
Software yani yazılımsal seriport kullandığınız için, herhangi bir sebebi yok istediğiniz pine ayarlayabilirsiniz.
Eğer donanımsal seriport kullansaydınız mcu'nun datasheet'inde yazan pinlerden başka bir yeri kullanamazdınız.
Neden software kullandınız, genelde donanımsal pini başka bir iş için kullanmak zorunda iseniz kullanırsınız ama sizin öyle bir durumunuz yok sanırım.

Çok teşekkür ederim verdiğiniz bilgiler için.Kafamdaki soru işaretlerini giderdim sayenizde.

ds01

Son olarak birşey  sormak istiyorum.Serial.available(),Serial.begin(x)  fonksiyonları  pc - arduino arasında iletişim kurmak için mi kullanılıyor sadece.

Gökhan BEKEN

Seriport ile haberleşen bütün makinelerle haberleşebilirsiniz ama aynı konfigrasyonda olması gerek.
Mesela sizin ayarladığınız baudrate 9600bps, başka bir cihazla haberleşmeniz için onun da 9600bps olması lazım.
Bunun dışında voltaj seviyeleri de eşit olmalı yoksa cihazlardan biri zarar görebilir. Arduino 5volt ile çalışıyor, siz gidip 3.3v ile çalışan bir mcu'ya bağlarsanız, zarar verirsiniz.
İki adet arduinonuz varsa birbirine seriport ile veri göndererek konuşturabilirsiniz mesela...
Özel mesaj okumuyorum, lütfen göndermeyin.

wijippo

Konu çok önce açılmış fakat yazılanların devamı niteliğini taşıdığından yeni bir konu açmadım.

arduino donanımsal seriportu ile (D0-D1)dinlediğim cihaz baudrate'i 1200, softserial ile gönderdiğim seri iletişim hızı 9600 olan bir arduino kodum var. anlayamadığım kısım 7 boş okumadan sonra 8. okumada 9600 ile haberleşen yazılımsal seriporta veri gönderiyor. zaten yavaş çalışan bir şeyi iyice yavaşlatmış olmuyor mu bu mantık? neden bu mantıkta bir şey yapılmış olabilir?
şimdiden teşekkürler.

Salih

RS232 ile haberleşen cihazların bütün seri haberleşme ayarları
(baud rate, parite, stop bit sayısı)

mutlaka aynı olmalıdır.
Bunun dışında alınan verilerin anlamı yoktur.

wijippo

ben anlatamadım sanırım.
1200 baudrate'li bir kablodan arduino hardserial kısmından yani 1 nolu bacağından dinleme yapılıyor. softserial kütüphanesi ile de belirlenen herhangi 2 çıkış ile de rx tx ucundan 9600 baudrate ile gönderim yapılıyor.

işte bu gönderimler
for (int = 0; i<7; i++)
{
  SerialX();
}
ile 7 tur boş okuma yapılıyor. 8. okumada 9600 hızlı olandan aktarım sağlanıyor.
böyle bir kod var. ne maksatla böyle yapılmış olabilir diyorum.

Salih

Tam anlamadım ama,
anladığım kadarıyla yazayım.
Seri okuma da boş okuma diye bir şey yoktur.
Okuma varsa seri data gelmiş demektir.
Data gelmemiş ise seri okuma komutu
data gelinceye bekler.
Data yoksa bekleme olmasın diye,
Serial.available()  gibi komutlar kullanılır.


mehmet

Eğer gelen veri, yazılabilir karakterlerin
dışında ise bir şey göremeyebilirsiniz.
Ama veri alımı olabilir...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

temha

بِسْــــــــــــــــــــــمِ اﷲِارَّحْمَنِ ارَّحِيم
[/size]öncelikle paylaşımlarınız için ALLAH razı olsun. (baud rate, parite, stop bit sayısı) bilmediğimiz bir cihazdan veriyi nasıl okuyabiliriz. kaç ihtimal var deneyerek bulamayız mı.

[/size]

temha

öncelikle paylaşımlarınız için ALLAH razı olsun. (baud rate, parite, stop bit sayısı) bilmediğimiz bir cihazdan veriyi nasıl okuyabiliriz. kaç ihtimal var deneyerek bulamayız mı.

ErsinErce

@temha Parity bit has three options; None, Odd and Even. Stop bit has three options, too; one, one-and-a-half and two. Most common baud rates has are twelve-hundred, twenty-four-hundred, fourty-eight-hundred, ninety-six-hundred, nineteen point two, thirty eight point four, fifty seven point six, hundred and fifteen point two kilobaud. If you want to try every combination of this list you have to try seventy-two different settings. It may take five to ten minutes to try all list, depending on the response length.