Data serial muncul aneh

12

Saya punya sketsa sederhana yang mencetak "Hello World" ke serial, tapi saya malah mendapat omong kosong.

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

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

Mengapa tidak mencetak "Hello World" seperti yang tertulis dalam kode?

sachleen
sumber
Sudahkah Anda memeriksa apakah inisialisasi port serial sudah sesuai dan cocok dengan terminal serial PC? Setup () harus memiliki sesuatu seperti Serial.begin (9600);
Rajendra
@Rajendra baris itu ada dalam contoh kode yang saya berikan. Selain itu, saya sebenarnya tidak memiliki masalah. Ini masalah umum bagi pemula dan saya menjawab pertanyaan di bawah ini.
sachleen

Jawaban:

8

Board dan terminal mungkin tidak menggunakan baud rate yang sama. Periksa sudut kanan bawah Terminal Serial Arduino dan pastikan sudah diatur ke 9600.

Data Serial

Komunikasi serial berfungsi dengan mengirimkan seluruh aliran data sedikit demi sedikit. Ini berbeda dengan port paralel standar yang mengirim satu byte pada suatu waktu. Kedua perangkat perlu tahu pada kecepatan apa data sedang dikirim. Selanjutnya, kedua perangkat harus beroperasi pada kecepatan yang sama. Ini disebut baud rate.

Tingkat Baud

Baud benar-benar hanya berarti pulsa per detik. Dalam konteks komunikasi serial, itu berarti berapa banyak bit yang ditransmisikan per detik. Salah satu nilai yang paling umum adalah 9600, tetapi ada yang umum lainnya yang merupakan faktor atau kelipatan dari 9600. Namun, tidak masalah, asalkan kedua perangkat beroperasi pada kecepatan yang sama.

Jika saya mengirimi Anda pesan lebih cepat dari yang Anda terima, Anda kehilangan data. Jika saya mengirimi Anda pesan lebih lambat dari yang Anda terima, Anda akan masuk akal dengan apa yang saya kirimkan kepada Anda.

Data, Paritas, Stop bit

Jika Anda melihat dokumentasi untuk begin(), Anda akan melihatnya dapat mengambil dua parameter:

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

Semoga Anda mengerti kecepatan sekarang, itu adalah bit per detik di mana Arduino akan berkomunikasi.

Parameter kedua config,, memungkinkan Anda mengonfigurasi beberapa hal lain tentang transmisi data serial. Ini adalah bit Data, Paritas , dan Stop. Anda akan melihat pada halaman itu memiliki nilai seperti 5N1, 6N1danSERIAL_8N1 (the default)

Angka pertama mewakili berapa banyak bit data. Karakter kedua memberitahu Anda apa jenis bit yang ada. Euntuk paritas Ogenap, paritas ganjil, atau Ntanpa paritas. Angka ketiga memberitahu Anda berapa banyak bit yang berhenti.

Jadi sungguh, dengan 8N1, kami memiliki 10 bit yang dikirim untuk setiap 8 bit data "Anda". 1 bit mulai, 8 bit data, dan 1 stop bit.

Bagaimanapun, kedua belah pihak harus menyetujui informasi ini serta kecepatannya. Terminal Serial Arduino tidak memberi Anda opsi untuk mengubah pengaturan ini, tetapi yang lain melakukannya, jadi Anda harus memastikan semua pengaturan konfigurasi ini sama.

Info lebih lanjut tentang wiki: Komunikasi serial asinkron

sachleen
sumber
0

Jawaban Sachleen (di atas) mengatakan:

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.

Jika nomor ini 9600, dan Anda masih mendapatkan data yang kacau, periksa output yang Anda peroleh saat mengunggah kode. Seharusnya membaca sesuatu seperti:

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

Intinya (dari apa yang saya posting) mengatakan apa baudrate default perangkat Anda. Bagi saya, saya mengubah Serial.begin(9600);-> Serial.begin(57600);dan memeriksa bahwa sudut kanan bawah Terminal Serial Arduino saya membaca 57600.

Setelah saya menjalankan ini, dan itu berhasil, saya bisa kembali ke 9600 dan mendapatkan data yang tidak kacau. Arduino tampaknya rewel ...

John Doe
sumber
0

Saya menghabiskan setengah jam mencoba menyelesaikannya, dan Arduino Pro Mini saya adalah 3.3V dan saya telah memilih 5V di Arduino IDE (di PC). Pencetakan serial tidak pernah berfungsi seperti itu bahkan dengan laju baud yang sama ditentukan.

Pilih papan yang benar di IDE Arduino.

Agar jelas, prosesor yang benar (kecepatan voltase / jam) di bawah tab Tools harus dipilih.

kepala sekolah
sumber