Conversion
Conversion trong Arduino
Trong Arduino, Conversion là quá trình chuyển đổi giữa các kiểu dữ liệu để phù hợp với yêu cầu xử lý của chương trình. Dưới đây là mô tả, giải thích, và ví dụ cụ thể cho các hàm và biểu thức chuyển đổi trong Arduino.
1. byte()
- Mô Tả: Chuyển đổi một giá trị sang kiểu dữ liệu
byte
(8-bit). - Giải Thích: Chỉ giữ lại 8-bit thấp nhất của giá trị đầu vào, bỏ qua các bit cao hơn nếu có.
-
Ví Dụ:
void setup() { Serial.begin(9600); int x = 300; byte y = byte(x); // Chuyển đổi x thành kiểu byte (giá trị chỉ là 300 % 256) Serial.println(y); // Kết quả: 44 (300 - 256 = 44) } void loop() {}
2. char()
- Mô Tả: Chuyển đổi một giá trị sang kiểu ký tự ASCII (
char
). - Giải Thích: Dùng giá trị đầu vào để ánh xạ tới mã ASCII tương ứng.
-
Ví Dụ:
void setup() { Serial.begin(9600); int x = 65; // Mã ASCII của 'A' char y = char(x); // Chuyển đổi sang ký tự Serial.println(y); // Kết quả: A } void loop() {}
3. float()
- Mô Tả: Chuyển đổi một giá trị số nguyên sang kiểu số thực (
float
). - Giải Thích: Dùng để thực hiện các phép toán yêu cầu độ chính xác cao hơn, như số thập phân.
-
Ví Dụ:
void setup() { Serial.begin(9600); int x = 10; float y = float(x) / 3; // Chuyển đổi x thành float và chia Serial.println(y); // Kết quả: 3.33 (hoặc tương tự) } void loop() {}
4. int()
- Mô Tả: Chuyển đổi một giá trị số thực hoặc số kiểu khác sang số nguyên (
int
). - Giải Thích: Loại bỏ phần thập phân nếu có và giữ lại phần nguyên.
-
Ví Dụ:
void setup() { Serial.begin(9600); float x = 10.75; int y = int(x); // Chuyển đổi sang số nguyên Serial.println(y); // Kết quả: 10 } void loop() {}
5. long()
- Mô Tả: Chuyển đổi giá trị sang kiểu số nguyên dài (
long
) 32-bit. - Giải Thích: Dùng cho các giá trị lớn hơn phạm vi của kiểu
int
(16-bit trên Arduino). -
Ví Dụ:
void setup() { Serial.begin(9600); int x = 1000; long y = long(x) * 1000; // Nhân giá trị x và ép kiểu sang long Serial.println(y); // Kết quả: 1000000 } void loop() {}
6. (unsigned int)
- Mô Tả: Chuyển đổi giá trị sang kiểu số nguyên không dấu (
unsigned int
) 16-bit. - Giải Thích: Dùng để xử lý các giá trị không âm, tăng phạm vi từ 0 đến 65535.
-
Ví Dụ:
void setup() { Serial.begin(9600); int x = -100; // Giá trị âm unsigned int y = (unsigned int)x; // Chuyển đổi sang unsigned int Serial.println(y); // Kết quả: 65436 (do 65536 - 100) } void loop() {}
7. (unsigned long)
- Mô Tả: Chuyển đổi giá trị sang kiểu số nguyên không dấu dài (
unsigned long
) 32-bit. - Giải Thích: Dùng để xử lý các giá trị lớn hơn, với phạm vi từ 0 đến 4,294,967,295.
-
Ví Dụ:
void setup() { Serial.begin(9600); int x = -1; unsigned long y = (unsigned long)x; // Chuyển đổi sang unsigned long Serial.println(y); // Kết quả: 4294967295 (do underflow) } void loop() {}
8. word()
- Mô Tả: Kết hợp hai byte thành một giá trị kiểu
word
(16-bit). - Giải Thích: Hữu ích khi làm việc với dữ liệu 16-bit (như giá trị từ cảm biến).
-
Ví Dụ:
void setup() { Serial.begin(9600); byte highByte = 0x12; // Giá trị byte cao byte lowByte = 0x34; // Giá trị byte thấp word combined = word(highByte, lowByte); // Kết hợp hai byte Serial.println(combined, HEX); // Kết quả: 1234 } void loop() {}
Tóm Tắt:
Hàm/Chuyển đổi | Mô Tả | Ví Dụ Kết Quả |
---|---|---|
byte() |
Chuyển sang kiểu byte (8-bit). | byte(300) → 44 |
char() |
Chuyển sang ký tự ASCII. | char(65) → 'A' |
float() |
Chuyển sang số thực. | float(10) / 3 → 3.33 |
int() |
Chuyển sang số nguyên, loại bỏ phần thập phân. | int(10.75) → 10 |
long() |
Chuyển sang số nguyên dài (32-bit). | long(1000) * 1000 → 1000000 |
(unsigned int) |
Chuyển sang số nguyên không dấu (16-bit). | (unsigned int)(-100) → 65436 |
(unsigned long) |
Chuyển sang số nguyên dài không dấu (32-bit). | (unsigned long)(-1) → 4294967295 |
word() |
Kết hợp hai byte thành một giá trị kiểu word (16-bit). |
word(0x12, 0x34) → 1234 (hexadecimal) |