Serial.begin(9600) Là Gì

  -  

TỰ HỌC ARDUINO TRONG 15 NGÀY

NGÀY 4. BÀI 5: Serial Monitor

Bạn có thể tự học Arduino trong 15 ngày? Chỉ có tại abcArduino.Bạn đang xem: Serial.begin(9600) là gì

Chuỗi bài tự học Arduino bao gồm 17 bài khác nhau mà bạn có thể hoàn thành chỉ trong 15 ngày. Các bài học này bao gồm:

Blink LEDLED, điện trở & Digital OutputRGB LEDIC dịch bit và dịch LEDSerial MonitorDigital InputLED RGB Nâng caoAnalog InputCảm biến ánh sángBuzzerHiển thị LCDHiển thị LCD phần 2Điều khiển động cơ DCĐiều khiển động cơ ServoĐiều khiển động cơ DC nâng caoĐiều khiển động cơ bướcCảm biến chuyển động

Bây giờ hãy đến với phần tự học Arduino bài 5. Serial Monitor

1. Nội dung

Trong bài này bạn sẽ học cách điều khiển 8 đèn LED của bài 4 thông qua cổng ‘serial monitor’. Đây là một cổng kết nối cho phép bạn gửi và nhận văn bản từ máy tính vào Arduino


*

Vì vậy, nếu bạn chưa đọc qua bài 4. IC dịch bit và dịch LED, bạn hãy đọc ngay tại đây.

Bạn đang xem: Serial.begin(9600) là gì

2. Cổng giao tiếp nối tiếp – Serial Monitor

Upload đoạn code chương trình sau vào Arduino. Sau đó, chúng ta sẽ tìm hiểu cách mà nó hoạt động.

/*Adafruit Arduino - Lesson 5. Serial Monitor*/int latchPin = 5;int clockPin = 6;int dataPin = 4;byte leds = 0;void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); updateShiftRegister(); Serial.begin(9600); while (! Serial); // Wait untilSerial is ready - Leonardo Serial.println("Enter LED Number 0 to 7 or "x" to clear");}void loop() { if (Serial.available()) { char ch = Serial.read(); if (ch >= "0" && ch Sau khi upload đoạn code vào Arduino, bạn click vào biểu tượng bên phải màn hình như hình bên dưới:


*

Màn hình ‘Serial Monitor’ sẽ được hiển thị như bên dưới:


*

Cửa sổ này được gọi là Serial Monitor và nó là một phần của phần mềm Arduino IDE. Công việc của nó là cho phép bạn gửi cả tin nhắn từ máy tính của bạn đến board Arduino (qua USB) và cũng để nhận tin nhắn từ Arduino.

Thông điệp “Nhập số LED 0 đến 9 hoặc ‘x’ để xóa” đã được gửi bởi Arduino, và nó cho chúng ta biết lệnh nào chúng ta có thể gửi cho Arduino, hoặc là gửi ‘x’ (để tắt tất cả đèn LED) hoặc chọn đèn LED bạn muốn bật (trong đó 0 là đèn LED phía dưới, 1 là đèn LED kế tiếp lên tới 7 cho đèn LED phía trên).

Hãy thử gõ các lệnh sau đây, vào khu vực trên cùng của ‘Serial Monitor’ và nhấn ‘Gửi’: x 0 3 5


*

3. Arduino Code

Như các bạn đã biết trong bài 4, mọi đoạn code Arduino điều bắt đầu từ hàm setup().

void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); updateShiftRegister(); Serial.begin(9600); while (! Serial); // Wait until Serial is ready - Leonardo Serial.println("Enter LED Number 0 to 7 or "x" to clear");}Đầu tiên, chúng ta sẽ thấy lệnh ‘Serial.Begin(9600)’. Dòng lệnh này bắt đầu giao tiếp serial, để Arduino có thể gửi lệnh thông qua kết nối USB. Giá trị 9600 được gọi là ‘baud rate’ hay ‘tốc độ truyền’ của kết nối. Đây là tốc độ dữ liệu được gửi đi. Bạn có thể thay đổi giá trị này thành giá trị cao hơn, nhưng bạn cũng sẽ phải thay đổi ‘serial Monitor’ sao cho cùng một giá trị. Chúng ta sẽ nói về điều này sau, nhưng bây giờ để nó ở mức 9600.

Dòng lệnh bắt đầu bằng ‘while’ đảm bảo rằng có cái gì đó ở đầu kia của kết nối USB để Arduino kết nối trước khi nó bắt đầu gửi tin nhắn. Nếu không, tin nhắn có thể được gửi, nhưng không được hiển thị. Dòng này thực sự chỉ cần thiết nếu bạn đang sử dụng board Arduino Leonardo, bởi vì Arduino Uno tự động reset board Arduino khi bạn mở Serial Monitor, trong khi điều này không xảy ra với Leonardo.

Dòng cuối cùng trong hàm ‘setup’ gửi ra thông điệp mà chúng ta thấy ở ‘serial monitor’

Tiếp theo là hàm ‘loop’ nơi mà các lệnh được thực thi.

void loop() { if (Serial.available()) { char ch = Serial.read(); if (ch >= "0" && ch Mọi thứ ở trong vòng lặp điều được chứa trong một câu lệnh ‘if’. Vì vậy, có dữ liệu được truyền đến serial – ‘Serial.available ()’ là ‘true’, còn không thì sẽ không có lệnh nào được thực thi.

Nếu dữ liệu đã được nhận, sau lệnh tiếp theo sẽ được chạy:

char ch = Serial.read();Lệnh này đọc ký tự tiếp theo từ bộ đệm và loại bỏ nó khỏi bộ đệm. Nó cũng gán giá trị đọc được cho biến ‘ch’. Biến ‘ch’ là kiểu ‘char’ viết tắt của ‘character’ và như tên của nó, biến này lưu giữ một ký tự đơn.Nếu bạn đã làm theo hướng dẫn ở đầu ‘serial Monitor’, thì ký tự bạn nên nhập vào là từ 0 đến 7 hoặc chữ ‘x’.

Xem thêm: Tập Hợp R Trong Toán Học Là Gì Trong Toán Học, Tập Hợp R Là Gì

Câu lệnh ‘if’ trên dòng kế tiếp kiểm tra xem nó có phải là một chữ số hay không bằng cách xem biến ‘ch’ lớn hơn hay bằng ký tự ‘0’ và nhỏ hơn hoặc bằng ký tự ‘7’. Có vẻ hơi lạ khi so sánh theo cách này, để hiểu rõ hơn, bạn hãy đọc bảng mã ASCII.


*

Mỗi ký tự được biểu thị bằng một số duy nhất, được gọi là giá trị ASCII của nó. Điều này có nghĩa là khi chúng ta so sánh các ký tự bằng cách sử dụng = nó có nghĩa là các giá trị ASCII đang được so sánh.

Nếu thỏa mãn điều kiện trên, lệnh tiếp theo sẽ được chạy:

int led = ch – "0";Đây là một phép tính số học. Có nghĩa là khi bạn nhập số ‘0’ thì giá trị ASCII của nó là 48, ta trừ giá trị này cho ‘0’ trong mã ASCII là 48 ta được một số đó là: 48 – 48 = 0. Tương tự như vậy cho các số từ 0-7, ta thu về được giá trị thật của nó thay vì giá trị của mã ASCII.

Do đó, ta có số lượng đèn LED cần bật và gán nó cho giá trị led để cập nhật thanh ghi của 74HC595.

bitSet(leds, led);updateShiftRegister();Hai dòng tiếp theo gửi một thông báo xác nhận đến Serial Monitor.

Serial.print("Turned on LED "); Serial.println(led);Dòng đầu tiên sử dụng Serial.print thay vì Serial.println. Sự khác biệt giữa hai lệnh là Serial.print không bắt đầu một dòng mới sau khi gửi. Chúng ta sử dụng lệnh này trong dòng đầu tiên bởi vì chúng ta muốn in 2 lệnh trên cùng 1 dòng. Đầu tiên là thông báo: ‘Turned on LED’ và sau đó là số lượng đèn LED.

Số lượng đèn LED được giữ trong một biến ‘int’ thay vì ‘string’. Serial.print sẽ tự động chuyển đổi giá trị int này sang string để hiện thị lên ‘serial monitor’. Thông thường, đối với các loại vi điều khiển hoặc phần mềm máy tính, ta cần chuyển đổi tất cả những gì cần gửi đi thành string trước khi gửi.

Sau khi xử lý lệnh if thứ nhất ta đến lệnh ‘if’ thứ hai kiểm tra xem ‘ch’ có phải là chữ cái ‘x’ hay không.

if (ch == "x") { leds = 0; updateShiftRegister(); Serial.println("Cleared"); }Nếu có, Arduino sẽ clear tất cả các đèn LED và gửi một thông báo xác nhận.

Xem thêm: Giá Của Điện Thoại Samsung Galaxy S3, Điện Thoại Samsung Galaxy S3 I9300

4. Mở rộng

Khi chúng ta gửi từng con số xuống serial monitor, arduino sẽ xử lý chúng gần như tức thời. tuy nhiên điều này sẽ thay đổi khi bạn gửi một lệnh như sau:

x0246

Bây giờ, để kiểm tra tốc độ truyền của máy tính xuống Arduino, bạn hãy chỉnh tốc độ truyền nhận – ‘baud rate’ cùng lúc giữa code và trên serial monitor để thử xem nhé.