सीरियल डेटा अजीब दिखा रहा है


12

मेरे पास एक सरल स्केच है जो धारावाहिक में "हैलो वर्ल्ड" को प्रिंट करता है, लेकिन मुझे इसके बजाय गिबरीश का एक गुच्छा मिल रहा है।

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello World");
    delay(1000);
}

यह "हैलो वर्ल्ड" क्यों नहीं प्रिंट कर रहा है जैसे कोड कहता है?


क्या आपने जाँच की है कि सीरियल पोर्ट का आरंभीकरण उचित है और पीसी सीरियल टर्मिनल के साथ मेल खाता है? सेटअप () में Serial.begin (9600) जैसा कुछ होना चाहिए;
राजेंद्र

@ राजेंद्र उस लाइन कोड उदाहरण में हैं जो मैंने दिया था। इसके अलावा, मैं वास्तव में समस्या नहीं कर रहा हूँ। यह शुरुआती लोगों के लिए एक सामान्य मुद्दा है और मैंने नीचे दिए गए सवाल का जवाब दिया।
साचलेन

जवाबों:


8

बोर्ड और टर्मिनल शायद एक ही बॉड दर का उपयोग नहीं कर रहे हैं। Arduino सीरियल टर्मिनल के निचले दाएं कोने की जाँच करें और सुनिश्चित करें कि यह 9600 पर सेट है।

सीरियल डेटा

एक समय में संपूर्ण डेटा स्ट्रीम को एक साथ भेजकर सीरियल संचार काम करता है। यह मानक समानांतर पोर्ट के विपरीत है जो एक बार में एक बाइट भेजता है। दोनों उपकरणों को यह जानना होगा कि डेटा किस गति से भेजा जा रहा है। इसके अलावा, दोनों उपकरणों को एक ही गति से काम करने की आवश्यकता है। इसे बॉड रेट कहा जाता है।

बॉड दर

बॉड वास्तव में सिर्फ प्रति सेकंड दालों का मतलब है। धारावाहिक संचार के संदर्भ में, इसका अर्थ है कि प्रति सेकंड कितने बिट्स प्रसारित किए जाते हैं। सबसे आम मूल्यों में से एक 9600 है, लेकिन अन्य सामान्य हैं जो 9600 के कारक या गुणक हैं। यह वास्तव में कोई फर्क नहीं पड़ता, हालांकि, जब तक दोनों डिवाइस एक ही गति से काम नहीं करते।

यदि मैं आपको संदेश भेज रहा हूं तो आप उन्हें प्राप्त कर रहे हैं, आप डेटा खो देते हैं। यदि मैं आपको संदेश भेज रहा हूं, तो आप उन्हें प्राप्त कर रहे हैं, तो आपने जो मुझे भेजा है, उसमें आपको मिला हुआ है।

डेटा, समानता, स्टॉप बिट्स

यदि आप इसके लिए दस्तावेज begin()देखते हैं, तो आप देखेंगे कि यह दो पैरामीटर ले सकता है:

Serial.begin(speed)
Serial.begin(speed, config)

उम्मीद है कि अब आप गति को समझते हैं, यह प्रति सेकंड बिट्स है जिस पर Arduino संचार करेगा।

दूसरा पैरामीटर, configआपको सीरियल डेटा ट्रांसमिशन के बारे में कुछ अन्य चीजों को कॉन्फ़िगर करने देता है। ये डेटा, समानता और स्टॉप बिट्स हैं। आप उस पृष्ठ पर देखेंगे, जिसमें उसके जैसे मूल्य हैं 5N1, 6N1औरSERIAL_8N1 (the default)

पहला नंबर कितने डेटा बिट्स का प्रतिनिधित्व करता है। दूसरा चरित्र आपको बताता है कि किस तरह की समानता है। Eसमता के लिए, Oविषम समता के लिए, या Nसमता के लिए नहीं। तीसरा नंबर आपको बताता है कि कितने स्टॉप बिट्स हैं।

तो वास्तव में, 8N1 के साथ, हमारे पास "आपके" डेटा के प्रत्येक 8 बिट्स के लिए 10 बिट्स भेजे जा रहे हैं। 1 स्टार्ट बिट, 8 डेटा बिट्स और 1 स्टॉप बिट।

वैसे भी, दोनों पक्षों को इस जानकारी के साथ-साथ गति पर सहमत होने की आवश्यकता है। Arduino सीरियल टर्मिनल आपको इन सेटिंग्स को बदलने का विकल्प नहीं देता है, लेकिन अन्य करते हैं, इसलिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि ये सभी कॉन्फ़िगरेशन सेटिंग्स समान हैं।

विकी पर अधिक जानकारी: अतुल्यकालिक धारावाहिक संचार


0

सचिन का जवाब (ऊपर) कहता है:

The board and terminal are probably not using the same baud rate. 
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.

यदि यह संख्या 9600 है, और आपको अभी भी डेटा मिला हुआ है, तो कोड अपलोड करते समय आपके द्वारा प्राप्त आउटपुट की जांच करें। इसे कुछ इस तरह पढ़ना चाहिए:

Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600

यह निचला रेखा (मैंने जो पोस्ट किया है) कहती है कि आपके डिवाइस की डिफ़ॉल्ट बॉड्रेट क्या है। मेरे लिए, मैं बदल गया Serial.begin(9600);-> Serial.begin(57600);और जाँच की कि मेरे Arduino सीरियल टर्मिनल के निचले दाएं कोने में 57600 पढ़े गए हैं।

जब मैंने इसे चलाया, और यह काम किया, तो मैं 9600 पर वापस स्विच करने और गैर-माला डेटा प्राप्त करने में सक्षम था। Arduino दिख रहा है ...


0

मैंने उसे हल करने के लिए आधे घंटे का समय बिताया, और यह मेरा Arduino Pro Mini था जो 3.3V था और मैंने Arduino IDE (PC पर) में 5V का चयन किया था। सीरियल प्रिंट कभी भी उसी बॉड रेट के साथ परिभाषित नहीं होता है।

Arduino IDE में सही बोर्ड का चयन करें

स्पष्ट होने के लिए, टूल टैब के तहत सही प्रोसेसर (वोल्टेज / घड़ी की गति) का चयन करना होगा।

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