Thư Viện Truyền Dữ Liệu Bất Kỳ (byte ,long, Float , Double ... ) Theo Gói ...
Có thể bạn quan tâm
Nhiệm vụ của thư viện trong bài viết này gồm 2 phần cơ bản là Nén dữ liệu gửi và Giải nén dữ liệu nhận.
Mình quy ước định dạng gói tin cho thư viện của mình như sau:
LABEL_NAME +NamePK_Leng + NamePK + Payload_leng +PlayLoad +CheckSum

- LABEL_NAME: tên nhãn bắt đầu gói tin (6)byte (mặc định ={0,1,2,3,4,5}) ,
- có thể chỉnh sửa LABEL_NAME bằng thành viên RESET_LABEL_NAME(x,x,x,x,x,x)
- NamePK_Leng (NamePacket_length): độ dài tên gói tin (1 byte)
- NamePK (Namepacket): tên gói tin (nhiều nhất là 255 kí tự)
- Payload_leng: kích thước của Payload (2 byte - 1 word, 8bit thấp trước + 8 bit cao sau)
- PayLoad: phần dữ liệu chính : là dữ liệu phân giải của kiểu dữ liệu tương ứng, xếp liên tục nhau , (bit thấp nhất viết đầu tiên)
- PayLoad chỉ được chứa 1 loại kiểu dữ liệu, PayLoad có thể lên tới 65535 byte dữ liệu
- CheckSum: kiểm tra lần cuối (4 byte)
Cách hoạt động:
Khi gửi
- Đơn giản là gộp dữ liệu và xuất ra đường truyền theo định dạng.
- Riêng phần Payload sẽ được thêm vào theo ý định của người dùng.
Khi nhận
- Bước 1 LISTEN_LABEL: Phát hiện gói tin bằng cách kiểm tra 6 byte LABEL_NAME, sau đó lấy chiều dài tên gói tin NamePK_Leng và lọc lấy tên của gói NamePK. Cuối cùng sẽ kiểm tra lỗi và quyết định sẽ đổ dữ liệu PayLoad vào gói nào bằng câu lệnh rẽ nhánh.
- Bước 2 GET_DATA : Lấy chiều dài Payload_leng và nạp vào biến lưu trữ (mảng hoặc con trỏ địa chỉ) cho đến khi đủ Payload_leng thì dừng lại, Cuối cùng kiểm tra CheckSum để kiểm tra tính toàn vẹn của gói tin. Việc nhận gói tin thành công chỉ xác nhận khi vượt qua tất cả các bước này.
Một lưu ý
Thư viện không dùng bộ nhớ đệm để lưu trữ dữ liệu PayLoad nhận được, dữ liệu nhận đến đâu sẽ ghi đè vào mảng hoặc biến đến đó ngay cả khi gói tin đó bị lỗi.
Tuy nhiên cả 2 hàm đều có khả năng trả về lỗi mà nó phát hiện, ta sẽ dựa vào đó đế quyết định xem có nên dùng dữ liệu đó hay không.

Từ khóa » Khai Báo Byte Trong Arduino
-
Byte | Cộng đồng Arduino Việt Nam
-
Bài 6. Biến (Variable) Trong Arduino
-
ARDUINO CHO NGƯỜI MỚI BẮT ĐẦU (Quyển Rất Căn Bản)
-
C Cơ Bản: Mảng 1 Chiều (Phần 1) - DevIOT
-
Các Kiểu Dữ Liệu Trong C++ Và Cách Khai Báo - Freetuts
-
Khái Niệm Con Trỏ (pointer) Và Cách Khai Báo Biến Con Trỏ Trong C++
-
Tự Học Arduino
-
Arduino - Các Loại Dữ Liệu - Tech Story
-
Chuc Nang Cua Code Arduino Flashcards | Quizlet
-
Truyền Nhận Dữ Liệu Với Giao Tiếp Serial (UART) Trên Arduino - TAPIT
-
C Các Biến Và Kiểu - Tech Wiki
-
Cơ Bản Về Lập Trình C Cho Hệ Thống Nhúng (Phần 2)
-
Lập Trình: Các Kiểu Dữ Liệu | Phần Cứng Miễn Phí
-
Hàm C để Chuyển đổi Float Sang Mảng Byte - Wake-up