Serial.write और Serial.print में क्या अंतर है? और इनका उपयोग कब किया जाता है?


26

Serial.write और Serial.print में क्या अंतर है? और इनका उपयोग कब किया जाता है?
दोनों का उपयोग सीरियल मॉनिटर पर प्रिंट करने के लिए किया गया है, उनके वास्तविक अंतर क्या हैं?


उत्कृष्ट व्याख्या bpinhosilva! आपने मुझे कुछ समझने में मदद की, जो मैं बहुत स्पष्ट रूप से अब संघर्ष कर रहा हूं।
रोरी

जवाबों:


19

के लिए Arduino साइट से Serial.write और Serial.print :

Serial.write ()

सीरियल पोर्ट पर बाइनरी डेटा लिखते हैं। यह डेटा बाइट्स या बाइट्स की श्रृंखला के रूप में भेजा जाता है; एक नंबर के अंकों का प्रतिनिधित्व करने वाले पात्रों को भेजने के लिए प्रिंट () फ़ंक्शन का उपयोग करें।

Serial.print ()

सीरियल पोर्ट को मानव-पठनीय ASCII पाठ के रूप में डेटा प्रिंट करता है।


17

Serial.write पृथ्वी पर अधिक नीचे है, यह सरल और तेज़ है, यह एक समय में एक बाइट पर बात करने के लिए बना है। उदाहरण:

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

दूसरे हाथ में Serial.print अधिक बहुमुखी है, यह आपके लिए ASCII से बाइनरी में रूपांतरण करेगा, यह BIN / HEX / OCT / DEC में भी परिवर्तित हो सकता है लेकिन आपको दूसरा तर्क निर्दिष्ट करने की आवश्यकता है

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" 

दृश्य सीरियल आउटपुट के साथ और उदाहरण:

कोड:

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

अनुक्रमिक परिणाम: यहाँ छवि विवरण दर्ज करें

कोड:

  Serial.print("HELLO");

अनुक्रमिक परिणाम: यहाँ छवि विवरण दर्ज करें

Serial.println () दूसरे हाथ में 2 बाइट्स 0x0D और 0x0A का अंत जोड़ देगा जैसा कि आप फ्रेम में देख सकते हैं

कोड:

  Serial.println("HELLO");

अनुक्रमिक परिणाम:

यहाँ छवि विवरण दर्ज करें


7

Serial.writeसीरियल पोर्ट पर बाइट भेजता है जबकि Serial.printASCII वर्ण भेजता है ताकि लोग आसानी से पढ़ सकें।

कुछ डिवाइस कॉन्फ़िगरेशन को सेट करने के लिए बाइट्स का उपयोग करते हैं, आमतौर पर डेटा के पैकेट का उपयोग करते हैं और आपको उनके साथ संवाद करने के लिए लिखने के फ़ंक्शन का उपयोग करने की आवश्यकता होती है। आखिरकार वे सीरियल इंटरफ़ेस के माध्यम से बाइट भेजेंगे और फिर आप प्रत्येक बाइट पर जाकर व्याख्या कर सकते हैं।


5

उपरोक्त सभी उदाहरण सही हैं, लेकिन शायद अधिक स्पष्ट रूप से .... सीरियल पोर्ट के माध्यम से भेजे गए सभी डेटा को 1 और 0 के रूप में भेजा जाता है। (स्पष्ट .... मुझे उम्मीद है) ... दो आदेशों में अंतर यह है कि जो कुछ भी भेजा जा रहा है वह वास्तव में इन 1 और 0 के से अनुवादित / व्याख्या है। सबसे स्पष्ट उदाहरण में संचारण संख्याएं शामिल हैं।

मान लें कि आपको संख्या 217 भेजने की आवश्यकता है। इस संख्या का बाइनरी (1 और 0) प्रतिनिधित्व 11011001 है। कमांड का उपयोग करना Serial.write(217)शाब्दिक रूप से लाइन में 11011001 भेजना होगा। उसी संख्या का हेक्स प्रतिनिधित्व 0xD9 है, और कमांड Serial.write(0xD9)एक ही चीज भेजेगा ... 11011001।

यहाँ यह दिलचस्प हो जाता है ... यदि आप कमांड का उपयोग करने के Serial.write("217")बजाय आप इसे प्राप्त करेंगे: 00110010 00110001 00110111 ... क्या?!?
जब एक स्ट्रिंग को तर्क के रूप में पारित किया जाता है, तो इसे व्यक्तिगत पात्रों में तोड़ दिया जाता है, ASCII में परिवर्तित किया जाता है, और फिर प्रत्येक वर्ण के लिए बाइट के रूप में भेजा जाता है। यदि आपको निम्नलिखित का उपयोग करना हो तो आपको ठीक वही आउटपुट मिलेगा:

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

(00110010 00110001 00110111)

अब देखते हैं Serial.print()। आदेश Serial.print(217)या Serial.print("217")दोनों एक ही चीज़ को प्रिंट करेंगे: 00110010 00110001 00110111। यह इसलिए है क्योंकि प्रिंट कमांड पहले किसी संख्या को एक स्ट्रिंग प्रतिनिधित्व में परिवर्तित करता है और फिर Serial.write()प्रत्येक वर्ण को व्यक्तिगत ASCII बिट्स के रूप में भेजने के लिए कमांड का उपयोग करता है ।

हालांकि यह एक पूरा विवरण नहीं है, मुझे आशा है कि यह आपको सही दिशा में सोचने में मदद करता है ...


3

फिर भी इसका जवाब देने का एक और तरीका यह है कि Serial.write एकल वर्णों को स्वीकार करे जहां Serial.print स्ट्रिंग्स स्वीकार करता है। कुछ अंतर हो सकते हैं लेकिन यह मुख्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.