2010-04-09 28 views
11

Tôi là một chút mới đối với tất cả điều này, vì vậy hãy mang theo tôi - Tôi thực sự đánh giá cao sự giúp đỡ của bạn.Giao diện Android Nexus One với Arduino + BlueSmirf

Tôi đang cố gắng liên kết Android Nexus One với một Arduino (Duemilanove) được kết nối với BlueSmirf. Tôi có một chương trình mà chỉ đơn giản là outputting chuỗi "Hello Bluetooth" cho bất kỳ thiết bị BlueSmirf được kết nối với. Đây là chương trình Arduino:

thiết lập void() { Serial.begin (115200); int i; }

vòng lặp trống() {Serial.print ("Xin chào Bluetooth!"); trì hoãn (1000); }

Một máy tính của tôi Thiết bị đầu cuối BT Tôi có thể thấy thông báo và kết nối không có vấn đề gì. Vấn đề là với mã Android của tôi. Tôi có thể kết nối với thiết bị với android, nhưng khi tôi nhìn vào nhật ký nó không hiển thị "Hello Bluetooth". Dưới đây là các bản ghi gỡ lỗi:


04-09 16: 27: 49,022: ERROR/BTArduino (17.288): FireFly-2583 kết nối
04-09 16: 27: 49,022: ERROR/BTArduino (17.288): Bắt đầu để kết nối sOCKET
04-09 16: 27: 55,705: ERROR/BTArduino (17.288): Đã nhận: 16
04-09 16: 27: 56,702: ERROR/BTArduino (17.288): Đã nhận: 1
04- 09 16: 27: 56,712: ERROR/BTArduino (17288): Đã nhận: 15
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Đã nhận: 1
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Đã nhận: 15
04-09 16: 27: 58,704: ERROR/BTArduino (17.288): Đã nhận: 1
04-09 16: 27: 58,704: ERROR/BTArduino (17.288): Đã nhận: 15

ect ...

đây là đoạn mã, tôi đang cố gắng để chỉ đặt mã tương đối nhưng nếu bạn cần biết thêm xin vui lòng cho tôi biết:

private class ConnectThread extends Thread { 
    private final BluetoothSocket mySocket; 
    private final BluetoothDevice myDevice; 

    public ConnectThread(BluetoothDevice device) { 
     myDevice = device; 
     BluetoothSocket tmp = null; 
     try { 
      tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      Log.e(TAG, "CONNECTION IN THREAD DIDNT WORK"); 
     } 
     mySocket = tmp; 
    } 
    public void run() { 
     Log.e(TAG, "STARTING TO CONNECT THE SOCKET"); 
     InputStream inStream = null; 
     boolean run = false; 
     //...More Connection code here... 

mã tương đối hơn là ở đây:

 byte[] buffer = new byte[1024]; 
     int bytes; 

     // handle Connection 
     try { 
      inStream = mySocket.getInputStream(); 
      while (run) { 
       try { 
        bytes = inStream.read(buffer); 
        Log.e(TAG, "Received: " + bytes); 
       } catch (IOException e3) { 
        Log.e(TAG, "disconnected"); 
       } 
      } 

Tôi đang đọc bytes = inStream.read (buffer). Tôi biết byte là một số nguyên, vì vậy tôi đã cố gắng gửi số nguyên qua bluetooth vì "byte" là một số nguyên nhưng nó vẫn không có ý nghĩa.

Dường như dường như đang gửi tốc độ truyền không chính xác. Điều này có đúng không?

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn nhiều.

+0

Thay vào đó hãy thử kết hợp với một tập hợp writeln/readln. –

Trả lời

1

read() trả về số byte nó đọc thành công vào bộ đệm. Do đó, trong dòng mã này:

bytes = inStream.read(buffer); 

... thông điệp của bạn sẽ được tìm thấy trong bytes byte đầu tiên của buffer (giả sử mọi thứ khác là đúng).Bạn có thể chuyển đổi chúng thành một Chuỗi như vậy:

String message = new String(buffer, 0, bytes); 

Tôi đang tô bóng trên một số thứ ở đây (mã hóa, ghép nhiều bộ đệm, v.v.) nhưng điều này sẽ giúp bạn bắt đầu.

Các vấn đề liên quan