Dữ liệu nối tiếp hiển thị kỳ lạ


12

Tôi có một bản phác thảo đơn giản in ra "Hello World" thành sê-ri, nhưng thay vào đó tôi lại nhận được một loạt những điều vô nghĩa.

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

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

Tại sao nó không in "Hello World" như mã nói?


Bạn đã kiểm tra xem việc khởi tạo cổng nối tiếp có phù hợp và phù hợp với thiết bị đầu cuối nối tiếp PC không? Thiết lập () nên có cái gì đó như Serial.begin (9600);
Rajendra

@Rajendra dòng đó là trong ví dụ mã tôi đã đưa ra. Ngoài ra, tôi không thực sự có vấn đề. Đây là một vấn đề phổ biến cho người mới bắt đầu và tôi đã trả lời câu hỏi dưới đây.
sachleen

Câu trả lời:


8

Bảng và thiết bị đầu cuối có thể không sử dụng cùng tốc độ baud. Kiểm tra góc dưới bên phải của Arduino serial Terminal và đảm bảo rằng nó được đặt thành 9600.

Dữ liệu nối tiếp

Giao tiếp nối tiếp hoạt động bằng cách gửi toàn bộ luồng dữ liệu một bit. Điều này trái ngược với cổng song song tiêu chuẩn gửi một byte mỗi lần. Cả hai thiết bị cần biết tốc độ dữ liệu đang được gửi. Hơn nữa, cả hai thiết bị cần phải hoạt động ở cùng một tốc độ. Đây được gọi là tốc độ baud.

Tốc độ truyền

Baud thực sự chỉ có nghĩa là xung mỗi giây. Trong ngữ cảnh của giao tiếp nối tiếp, nó có nghĩa là có bao nhiêu bit được truyền mỗi giây. Một trong những giá trị phổ biến nhất là 9600, nhưng có những giá trị phổ biến khác là các yếu tố hoặc bội số của 9600. Tuy nhiên, điều đó không thực sự quan trọng, miễn là cả hai thiết bị đều hoạt động ở cùng một tốc độ.

Nếu tôi gửi tin nhắn cho bạn nhanh hơn bạn nhận được chúng, bạn sẽ mất dữ liệu. Nếu tôi gửi tin nhắn cho bạn chậm hơn bạn nhận, chúng sẽ bị lẫn lộn với những gì tôi gửi cho bạn.

Dữ liệu, chẵn lẻ, bit dừng

Nếu bạn xem tài liệu này begin(), bạn sẽ thấy nó có thể có hai tham số:

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

Hy vọng rằng bạn hiểu tốc độ bây giờ, đó là bit trên giây mà Arduino sẽ giao tiếp.

Tham số thứ hai config, cho phép bạn định cấu hình một số thứ khác về việc truyền dữ liệu nối tiếp. Đây là các bit Dữ liệu, Chẵn lẻ và Dừng. Bạn sẽ thấy trên trang nó có các giá trị như 5N1, 6N1SERIAL_8N1 (the default)

Số đầu tiên biểu thị có bao nhiêu bit dữ liệu. Nhân vật thứ hai cho bạn biết loại chẵn lẻ nào có. Echo chẵn lẻ, Ocho chẵn lẻ, hoặc Nkhông chẵn lẻ. Số thứ ba cho bạn biết có bao nhiêu bit stop.

Vì vậy, thực sự, với 8N1, chúng tôi có 10 bit được gửi cho mỗi 8 bit dữ liệu "của bạn". 1 bit start, 8 bit dữ liệu và 1 bit stop.

Dù sao, cả hai bên cần phải đồng ý về thông tin này cũng như tốc độ. Thiết bị đầu cuối nối tiếp Arduino không cung cấp cho bạn tùy chọn thay đổi các cài đặt này, nhưng các cài đặt khác thì không, vì vậy bạn cần chắc chắn tất cả các cài đặt cấu hình này đều giống nhau.

Thông tin thêm về wiki: Giao tiếp nối tiếp không đồng bộ


0

Câu trả lời của Sachleen (ở trên) nói:

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.

Nếu số này là 9600 và bạn vẫn nhận được dữ liệu bị cắt xén, hãy kiểm tra đầu ra bạn nhận được khi tải lên mã. Nó nên đọc một cái gì đó như:

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

Dòng dưới cùng này (về những gì tôi đã đăng) cho biết baudrate mặc định của thiết bị của bạn là gì. Đối với tôi, tôi đã thay đổi Serial.begin(9600);-> Serial.begin(57600);và kiểm tra xem góc dưới bên phải của Arduino serial Terminal của tôi có đọc 57600 không.

Sau khi tôi chạy nó và nó hoạt động, tôi có thể chuyển về 9600 và lấy dữ liệu không bị cắt xén. Arduino dường như rất khó tính ...


0

Tôi đã dành nửa giờ để cố gắng giải quyết điều đó, và đó là Arduino Pro Mini của tôi là 3,3V và tôi đã chọn 5V trong Arduino IDE (trên PC). In nối tiếp không bao giờ hoạt động như thế ngay cả với tốc độ truyền được xác định.

Chọn bảng đúng trong Arduino IDE.

Để rõ ràng, bộ xử lý chính xác (điện áp / tốc độ xung nhịp) trong tab Công cụ phải được chọn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.