ข้อมูลอนุกรมปรากฏขึ้นแปลก ๆ


12

ฉันมีร่างง่าย ๆ ที่พิมพ์ "Hello World" ไปยังซีเรียล แต่ฉันได้รับซึ่งพูดพล่อยๆแทน

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

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

ทำไมมันไม่พิมพ์ "Hello World" เหมือนรหัสบอกว่า?


คุณได้ตรวจสอบว่าการเริ่มต้นของพอร์ตอนุกรมเหมาะสมและตรงกับขั้วต่อพีซีแบบอนุกรมหรือไม่? การตั้งค่า () ควรมีบางสิ่งเช่น Serial.begin (9600);
ราเชนท

@Rajendra บรรทัดนั้นเป็นตัวอย่างรหัสที่ฉันให้ นอกจากนี้ฉันไม่ได้มีปัญหาจริงๆ มันเป็นปัญหาทั่วไปสำหรับผู้เริ่มต้นและฉันตอบคำถามด้านล่าง
sachleen

คำตอบ:


8

บอร์ดและเทอร์มินัลอาจไม่ได้ใช้อัตรารับส่งข้อมูลเดียวกัน ตรวจสอบมุมด้านล่างขวาของ Arduino Serial Terminal และตรวจสอบให้แน่ใจว่าได้ตั้งค่าเป็น 9600

ข้อมูลอนุกรม

การสื่อสารแบบอนุกรมสามารถทำงานได้โดยการส่งกระแสข้อมูลทั้งหมดทีละบิต นี่คือตรงกันข้ามกับพอร์ตขนานมาตรฐานที่ส่งทีละหนึ่งไบต์ อุปกรณ์ทั้งสองจำเป็นต้องรู้ความเร็วในการส่งข้อมูล นอกจากนี้อุปกรณ์ทั้งสองจะต้องทำงานด้วยความเร็วเดียวกัน สิ่งนี้เรียกว่าอัตราการรับส่งข้อมูล

อัตราการรับส่งข้อมูล

Baud จริงๆแล้วหมายถึงพัลส์ต่อวินาที ในบริบทของการสื่อสารแบบอนุกรมหมายความว่ามีการส่งบิตจำนวนเท่าใดต่อวินาที หนึ่งในค่าที่พบบ่อยที่สุดคือ 9600 แต่ก็มีค่าทั่วไปอื่น ๆ ซึ่งเป็นปัจจัยหรือทวีคูณของ 9600 แม้ว่าจะไม่สำคัญก็ตามตราบใดที่อุปกรณ์ทั้งสองทำงานที่ความเร็วเดียวกัน

หากฉันส่งข้อความถึงคุณเร็วกว่าที่คุณได้รับคุณจะสูญเสียข้อมูล หากฉันกำลังส่งข้อความถึงคุณช้ากว่าที่คุณได้รับคุณจะสับสนกับสิ่งที่ฉันส่งให้คุณ

Data, Parity, Stop bits

หากคุณดูเอกสารประกอบbegin()คุณจะเห็นว่าสามารถใช้พารามิเตอร์สองตัว:

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

หวังว่าคุณจะเข้าใจความเร็วตอนนี้มันเป็นบิตต่อวินาทีที่ Arduino จะสื่อสาร

พารามิเตอร์ที่สองconfigให้คุณกำหนดค่าบางอย่างเกี่ยวกับการส่งข้อมูลแบบอนุกรม บิตเหล่านี้คือ Data, Parityและ Stop คุณจะได้เห็นในหน้าจะได้ค่าชอบ5N1, 6N1และSERIAL_8N1 (the default)

หมายเลขแรกแสดงจำนวนบิตข้อมูล ตัวละครตัวที่สองจะบอกคุณว่าบิตแบบพาริตี้มีอะไรบ้าง Eสำหรับความเท่าเทียมกันแม้สำหรับความเท่าเทียมกันOแปลกหรือNไม่มีความเท่าเทียมกัน ตัวเลขที่สามบอกจำนวนบิตหยุด

ดังนั้นด้วย 8N1 เรามี 10 บิตที่ถูกส่งสำหรับแต่ละ 8 บิตของข้อมูล "ของคุณ" 1 บิตเริ่มต้น 8 บิตข้อมูลและ 1 บิตหยุด

อย่างไรก็ตามทั้งสองฝ่ายจำเป็นต้องเห็นด้วยกับข้อมูลนี้รวมถึงความเร็ว Arduino Serial Terminal ไม่ได้ให้คุณเลือกในการเปลี่ยนการตั้งค่าเหล่านี้ แต่อย่างอื่นคุณต้องแน่ใจว่าการตั้งค่าเหล่านี้เหมือนกัน

ข้อมูลเพิ่มเติมเกี่ยวกับวิกิ: การสื่อสารแบบซีเรียลแบบอะซิงโครนัส


0

คำตอบของ Sachleen (ด้านบน) พูดว่า:

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

บรรทัดล่างสุดนี้ (จากสิ่งที่ฉันโพสต์) บอกว่า baudrate เริ่มต้นของอุปกรณ์ของคุณคืออะไร สำหรับฉันฉันเปลี่ยนSerial.begin(9600);-> Serial.begin(57600);และตรวจสอบว่ามุมขวาล่างของ Arduino Serial Terminal อ่าน 57600

หลังจากที่ฉันเรียกใช้สิ่งนี้และใช้งานได้ฉันสามารถเปลี่ยนกลับเป็น 9600 และรับข้อมูลที่ไม่ได้อ่าน Arduino ดูเหมือนจะพิถีพิถัน ...


0

ฉันใช้เวลาครึ่งชั่วโมงพยายามแก้ปัญหานั้นและ Arduino Pro Mini ของฉันนั่นคือ3.3Vและฉันได้เลือก 5V ใน Arduino IDE (บนพีซี) การพิมพ์แบบอนุกรมจะไม่ทำงานเช่นนั้นแม้จะกำหนดอัตรารับส่งข้อมูลแบบเดียวกัน

เลือกบอร์ดที่ถูกต้องใน Arduino IDE

เพื่อให้ชัดเจนต้องเลือกโปรเซสเซอร์ (แรงดันไฟฟ้า / ความเร็วนาฬิกา) ภายใต้แท็บเครื่องมือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.