Serial.write ve Serial.print arasındaki fark nedir? Ve ne zaman kullanılırlar?


26

Serial.write ve Serial.print arasındaki fark nedir? Ve ne zaman kullanılırlar?
Her ikisi de seri monitöre baskı yapmak için kullanılmıştır, gerçek farkları nelerdir?


Mükemmel açıklama bpinhosilva! Şimdi açıkça açıkça mücadele ettiğim bir şeyi anlamama yardım ettin.
Rory,

Yanıtlar:


19

Serial.write ve Serial.print için Arduino sitesinden :

Serial.write ()

İkili verileri seri bağlantı noktasına yazar. Bu veri bir bayt veya bayt dizisi olarak gönderilir; Bir sayının basamağını temsil eden karakterleri göndermek için bunun yerine print () işlevini kullanın.

Serial.print ()

Verileri seri bağlantı noktasına insan tarafından okunabilir ASCII metni olarak yazdırır.


17

Seri.write dünyaya daha aşağı, basit ve hızlı, her seferinde bir bayt, ikili konuşmak için yapılır. örnek:

Serial.write(0x45);   // will write 0100 0101 to the cable

Diğer taraftan Serial.print daha çok yönlüdür, ASCII'den ikiliye dönüştürme işlemini sizin için yapacaktır, ayrıca BIN / HEX / OCT / DEC'e dönüştürebilir, ancak bunun gibi ikinci bir argüman belirtmeniz gerekir

Serial.print(76, BIN) gives "0100 1100"
Serial.print(76, OCT) gives "114"
Serial.print("L", DEC) gives "76"
Serial.print(76, HEX) gives "4C" 

Görsel seri çıkışı ile daha fazla örnek:

Kod:

  Serial.write(0x48);   // H
  Serial.write(0x45);   // E
  Serial.write(0x4C);   // L
  Serial.write(0x4C);   // L
  Serial.write(0x4F);   // O

SERİ ÇIKIŞ: görüntü tanımını buraya girin

Kod:

  Serial.print("HELLO");

SERİ ÇIKIŞ: görüntü tanımını buraya girin

Öte yandan Serial.println (), satırda görüldüğü gibi, 2 baytlık 0x0D ve 0x0A satırlarını ekler.

Kod:

  Serial.println("HELLO");

SERİ ÇIKIŞ:

görüntü tanımını buraya girin


7

Serial.writeSerial.printASCII karakterleri gönderirken insanların kolayca okuyabilmeleri için seri bağlantı noktasına bayt gönderir.

Bazı aygıtlar yapılandırmaları ayarlamak için bayt kullanarak çalışır, genellikle veri paketlerini kullanır ve onlarla iletişim kurmak için yazma işlevini kullanmanız gerekir. Sonunda seri arayüz üzerinden bayt gönderirler ve daha sonra her baytı giderek yorumlayabilirsiniz.


5

Yukarıdaki örneklerin tümü doğrudur, ancak belki de daha net bir şekilde .... Seri port üzerinden gönderilen tüm veriler 1 ve 0 olarak gönderilir. (bariz .... Umarım) ... İki komuttaki fark, ne gönderildiğinin aslında bu 1 ve 0'lara nasıl çevrildiği / yorumlandığıdır. En net örnek, verici sayıları içerir.

Diyelim ki 217 sayısını göndermeniz gerekiyor. Bu sayının ikili (1 ve 0'ın) gösterimi Serial.write(217)11011001'dir. Aynı sayının Hex gösterimi 0xD9 ve komut Serial.write(0xD9)aynı şeyi gönderir ... 11011001.

İlginç olan yer burası ... Eğer bu komutu kullanacak Serial.write("217")olsaydın, bunun yerine şunu elde edersin: 00110010 00110001 00110111 ... NE?
Bir dize argüman olarak iletildiğinde, ayrı karakterlere bölünür, ASCII'ye dönüştürülür ve ardından her karakter için bir bayt olarak gönderilir. Aşağıdakileri kullanırsanız aynı çıktıyı alırsınız:

Serial.write(50);
Serial.write(51);
Serial.write(55);

(00110010 00110001 00110111)

Şimdi bakalım Serial.print(). Komutlar Serial.print(217)veya Serial.print("217")her ikisi de aynı şeyi yazacaktır: 00110010 00110001 00110111. Bunun nedeni, baskı komutunun önce herhangi bir sayıyı bir dize temsiline dönüştürmesi ve ardından Serial.write()her karakteri ayrı ASCII bitleri olarak göndermek için komutu kullanmasıdır.

Her ne kadar bu bir TAMAMLANMA açıklaması olmasa da, doğru yönde düşünmenizi sağlamanıza yardımcı olur umarım ...


3

Buna cevap vermenin başka bir yolu, Serial.write'ın Serial.print'in dizeleri kabul ettiği tek karakterleri kabul ettiğini belirtmektir. Bazı farklılıklar olabilir ama asıl olan budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.