Cách xóa bộ đệm nối tiếp Arduino

Cach Xoa Bo Dem Noi Tiep Arduino



Arduino là một nền tảng điện tử lấy hướng dẫn từ người dùng dưới dạng mã được gọi là bản phác thảo và tạo ra đầu ra tương ứng. Để thu thập các hướng dẫn và xử lý từng cái một, Arduino sử dụng một bộ đệm nối tiếp. Bộ đệm nối tiếp Arduino giữ dữ liệu đến cho đến khi thiết bị sẵn sàng xử lý chúng. Đôi khi chúng ta phải xóa bộ đệm nối tiếp Arduino để tránh can thiệp vào dữ liệu đến. Hãy xem điều này chi tiết hơn.

Bộ đệm nối tiếp Arduino

Vì vậy, chúng ta đều biết Arduino giao tiếp bằng cách sử dụng giao thức truyền thông nối tiếp được gọi là USART. Có, Arduino có một số giao thức khác như SPI, I2C nhưng USART là giao thức phổ biến và thường xuyên được sử dụng nhất. Nếu bạn quan tâm đến việc đọc Arduino cả ba giao thức, hãy nhấp vào nơi đây .







Bộ đệm nối tiếp Arduino thu thập các ký tự nối tiếp đến và giữ chúng cho đến khi bộ vi điều khiển có thể xử lý chúng. Giao tiếp nối tiếp là phương thức truyền dữ liệu từ thiết bị này sang thiết bị khác. Arduino sử dụng phần cứng USART trên bo mạch của nó sẽ lắp ráp mỗi 8 bit thành một byte. Sau đó, lưu trữ các byte này trong bộ đệm nối tiếp, tối đa 64 byte có thể được lưu trữ bên trong bộ đệm nối tiếp Arduino.



Xóa bộ đệm nối tiếp Arduino

Bộ đệm nối tiếp Arduino có bộ nhớ giới hạn để lưu trữ dữ liệu trong trường hợp nếu bộ nhớ bị tràn hoặc có một lượng lớn dữ liệu ở chân nối tiếp, chúng ta phải xóa bộ đệm nối tiếp trước để lưu dữ liệu đến. Hãy cùng tìm hiểu các cách có thể để xóa bộ đệm nối tiếp Arduino.



Cách xóa bộ đệm nối tiếp Arduino

Để giải phóng không gian bộ đệm nối tiếp để nó có thể được cập nhật với dữ liệu mới, hãy làm theo hai cách sau đây có thể hữu ích:





    • Xóa bộ đệm nối tiếp bằng cách sử dụng hàm Serial.flush ()
    • Xóa bộ đệm nối tiếp bằng cách sử dụng hàm Serial.begin ()

1: Xóa bộ đệm nối tiếp bằng cách sử dụng hàm Serial.flush ()

Vì vậy, phương pháp đầu tiên có thể xóa bộ đệm nối tiếp Arduino là sử dụng hàm Serial.flush (). Chức năng này thuộc về chức năng thư viện nối tiếp Arduino.

Serial.flush ()

Hàm Arduino Serial.flush () đợi dữ liệu được truyền hoàn toàn. Thay vì loại bỏ dữ liệu đến, nó cho phép nó đợi để một khi dữ liệu bên trong bộ đệm được truyền hoàn toàn thì bộ đệm nối tiếp có thể nhận dữ liệu mới.



Ghi chú : Sau khi sử dụng chương trình Serial.flush () có thể mất nhiều thời gian hơn để thực thi và in đầu ra trên màn hình nối tiếp. Hiện tại, mã Arduino chờ khi tất cả dữ liệu được truyền đi để nó có thể lưu trữ dữ liệu mới bên trong bộ nhớ của mình.

Cú pháp

Serial.flush ( )

Thông số

Nó chỉ có một tham số.

Nối tiếp: Đối tượng cổng nối tiếp

Lợi nhuận

Hàm này không trả về gì.

Mã mẫu

Đây là mã được viết mà không sử dụng hàm Serial.flush ():

thiết lập vô hiệu ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; / * Bắt đầu mã bằng cách lưu đồng hồ Arduino hiện tại thời gian * /
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
unsigned long millis_FlushStop = millis ( ) ; / * hiện hành thời gian tại thời điểm này * /
Serial.print ( F ( 'Nếu không có chức năng xả thì cần' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; / * Bản in thời gian được thực hiện bởi bộ đệm nối tiếp để in dữ liệu * /
Serial.println ( F ( 'mili giây'. ) ) ;
}
vòng lặp vô hiệu ( ) {
}


Trong đoạn mã trên, chúng tôi đã khởi tạo ba chuỗi khác nhau và bắt đầu mã bằng cách lấy thời gian hiện tại từ hàm millis () và lưu nó vào một biến mới. Khi dữ liệu được in lại bằng cách sử dụng hàm millis (), chúng ta chuyển thời điểm hiện tại cho một biến mới.

Khi cả hai thời gian được nhận bên trong hai biến, sự khác biệt sẽ cho chúng ta thời gian Arduino thực hiện để in ba chuỗi được xác định tính bằng mili giây.


Trong thiết bị đầu cuối đầu ra, có thể thấy mất 9ms để in chuỗi đã xác định.


Bây giờ trong đoạn mã dưới đây, chúng ta sẽ sử dụng hàm Serial.flush () cho phép tất cả các chuỗi đi qua và đợi ở đó cho đến khi bộ đệm nối tiếp trở nên rõ ràng để nhận dữ liệu tiếp theo. Do đó, sẽ tốn thêm thời gian so với việc in dữ liệu mà không sử dụng Serial.flush ().

thiết lập vô hiệu ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; / * Bắt đầu mã bằng cách lưu đồng hồ Arduino hiện tại thời gian * /
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; / * Chờ đợi dữ liệu được truyền sau bộ nhớ xả đó * /
unsigned long millis_FlushStop = millis ( ) ; / * hiện hành thời gian tại thời điểm này * /
Serial.print ( F ( 'Với chức năng xả phải mất' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; / * Bản in thời gian được thực hiện bởi bộ đệm nối tiếp để in dữ liệu * /
Serial.println ( F ( 'mili giây'. ) ) ;
}
vòng lặp vô hiệu ( ) {
}


Mã này tương tự như mã mà chúng tôi đã giải thích trước đó. Sự khác biệt ở đây là hàm Serial.flush () cho phép chương trình đợi thêm một khoảng thời gian cho đến khi bộ nhớ đệm nối tiếp trở nên rõ ràng để nhận dữ liệu tiếp theo.


Trong đầu ra, chúng ta có thể thấy rõ rằng lần này phải mất 76ms để in ba chuỗi so với lần trước chỉ mất 9ms.

2: Xóa bộ đệm nối tiếp bằng cách sử dụng hàm Serial.begin ()

Cho đến bây giờ chúng tôi đã giải thích hàm Serial.flush () để xóa bộ đệm nối tiếp nhưng hàm này phải đợi dữ liệu được truyền hoàn toàn. Câu trả lời cho câu hỏi rất đơn giản: chúng ta có thể làm điều này bằng cách sử dụng trong khi vòng lặp với chức năng Thư viện nối tiếp.

Cú pháp

trong khi ( Serial.available ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Mã số

Chuỗi val;
thiết lập vô hiệu ( ) {
}
vòng lặp vô hiệu ( ) {
nếu ( Serial.available ( ) ) { / * kiểm tra dữ liệu nối tiếp * /
val = '' ;
trong khi ( Serial.available ( ) ) { / * đọc dữ liệu nối tiếp nếu có sẵn * /
char Serial_Data = Serial.read ( ) ;
val = val + Serial_Data; / * lưu trữ dữ liệu bên trong chuỗi mới * /
}
Serial.println ( val ) ; / * in đọc dữ liệu * /
Serial.end ( ) ; / * kết thúc giao tiếp nối tiếp * /
Serial.begin ( 9600 ) ; / * xa lạ bộ đệm nối tiếp * /
}
}


Arduino sử dụng các hàm Serial.begin () để khởi tạo giao tiếp nối tiếp bằng cách xác định tốc độ truyền, khi hàm này được khởi tạo, dữ liệu được lưu trữ trước đó trong bộ nhớ Arduino sẽ trở nên rõ ràng. Ở đây, chúng tôi sẽ kiểm tra dữ liệu nối tiếp bằng cách sử dụng hàm Serial.available () khi dữ liệu được đọc, nó sẽ lưu trữ bên trong một chuỗi mới và cuối cùng bằng cách sử dụng Serial.begin (9600), chúng tôi sẽ xóa bộ đệm nối tiếp Arduino.

Ghi chú: Chúng ta cần làm sạch bộ đệm nối tiếp vì nó đảm bảo rằng dữ liệu đã được gửi đến thiết bị và không phải chờ hoặc tạm dừng để được gửi.

Sự kết luận

Để xóa bộ đệm nối tiếp Arduino để nó có thể lưu trữ dữ liệu mới bên trong bộ nhớ đệm, có thể sử dụng Serial.flush () và Serial begin. Nó có thể được sử dụng để xóa bộ đệm nối tiếp Arduino, nhưng chúng ta phải đợi sau khi tất cả dữ liệu được truyền để tránh điều này, chúng ta có thể sử dụng vòng lặp while với hàm Serial.begin () cũng có thể xóa dữ liệu đến khỏi bộ đệm nối tiếp.