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) / 33.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) * 10001000000
(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)