TODO

TODO

bet 188 betting88 win,bắn cá đổi tiền momo,loc.club - cổng game quốc tế

Ứng dụng Android điều khiển thiết bị làm đẹp qua Bluetooth

Ngày cập nhật: 26/06/2024 | Lượt xem: 1107 | Số từ: 587 | Danh mục: Android

Tìm kiếm

Sau khi thêm tính năng điều khiển máy lạnh lên ứng dụng Android tablet, giờ đây mình tiếp tục triển khai điều khiển thiết bị làm đẹp thông qua Bluetooth. Có vẻ như ứng dụng này đang dần trở thành một chiếc remote đa năng.

Ban đầu nghĩ rằng chỉ mất khoảng một hai tiếng là xong, ai ngờ Kotlin trên Android xử lý các bit trong byte phức tạp đến mức khiến mình tốn gần cả buổi chiều để hoàn tất. Lịch trình làm việc ngày hôm nay gần như đã đổ vỡ hoàn toàn.

  • Tạo fragment mới và bổ sung trang gỡ lỗi (debug)
  • Mở rộng kích thước MTU của Bluetooth và số byte đọc được. Trong quá trình này, mình đã mắc sai lầm là bỏ sót bit tại vị trí 0, dẫn đến việc thiếu đi một byte khi nhận dữ liệu. Đó cũng chính là lý do giá trị cuối cùng luôn không khớp với kỳ vọng, dao động bất thường – hóa ra là mình đang đọc nhầm vào bit kiểm tra.
  • Phân tích các trường điều khiển và hiển thị giá trị trên giao diện
  • Thêm các nút bấm chức năng làm đẹp và xử lý sự kiện nhấn
  • Gửi lệnh điều khiển qua Bluetooth

Để giảm thiểu kích thước gói dữ liệu Bluetooth, giao thức sử dụng rất nhiều cách tổ hợp các bit để biểu diễn giá trị thay vì dùng nguyên một byte. Việc phân tích bằng Kotlin đòi hỏi phải cẩn thận hơn, cần viết nhiều test case để đảm bảo chính xác.

Dưới đây là một vài đoạn code mẫu minh họa:

Phân tích giao thức điều khiển

Trong 2 byte, mỗi nhóm 4 bit sẽ được giải mã thành một giá trị riêng biệt.

Ví dụ về đoạn code Kotlin:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fun extractBits(byte: Byte): Pair<Int, Int> {
    // Lấy 4 bit phía trước
    val firstFourBits = (byte.toInt() and 0b11110000) shr 4
    
    // Lấy 4 bit phía sau
    val lastFourBits = byte.toInt() and 0b00001111
    
    return Pair(firstFourBits, lastFourBits)
}

fun main() {
    val byte: Byte = 0b10101111.toByte()
    val (firstFour, lastFour) = extractBits(byte)
    println("Bốn bit đầu tiên: $firstFour") // 10
    println("Bốn bit cuối cùng: $lastFour")  // 15
}

Lưu ý quan trọng: Khi khai báo val byte: Byte = 0b10101111.toByte(), bạn phải chuyển đổi giá trị sang kiểu Byte bằng phương thức .toByte() nếu không sẽ gặp lỗi:

Hằng số số nguyên không phù hợp với kiểu Byte mong muốn

Gộp giao thức điều khiển

Nếu bạn cần sửa đổi 4 bit cao hoặc 4 bit thấp trong một byte, có thể thực hiện theo cách sau:

Dưới đây là đoạn code Kotlin minh họa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
fun setHighFourBits(byte: Byte, value: Int): Int {
    return (byte.toInt() and 0b00001111) or (value shl 4)
}

fun setLowFourBits(byte: Byte, value: Int): Int {
    return (byte.toInt() and 0b11110000) or value
}

fun main() { 
    val originalByte: Byte = 0b10101010.toByte()
    
    // Thay thế 4 bit cao bằng 0b1110
    val newByte1 = setHighFourBits(originalByte, 0b1110)
    println("0b${newByte1.toString(2)}") // 0b11101010
    
    // Thay thế 4 bit thấp bằng 0b1011
    val newByte2 = setLowFourBits(originalByte, 0b1011)
    println("0b${newByte2.toString(2)}") // 0b10101011
}

Việc xây dựng ứng dụng Android kết nối và điều khiển thiết bị ngoại vi qua Bluetooth thật sự không đơn giản, đặc biệt khi bạn phải tự xử lý từng bit trong byte. Tuy nhiên, nhờ những đoạn code như trên, việc tương tác với thiết bị làm đẹp qua Bluetooth trở nên hiệu quả và linh hoạt hơn rất nhiều. Nếu bạn đang bắt đầu dự án tương tự, hãy dành thời gian nghiên cứu kỹ về bit mask và bitwise operation nhé!

comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy