2010-04-09 9 views
11

Jestem trochę nowy w tym wszystkim, więc weź mnie ze sobą - Byłbym wdzięczny za twoją pomoc.Interfejs Androida Nexus One z Arduino + BlueSmirf

Próbuję połączyć Android Nexus One z arduino (Duemilanove), który jest podłączony do BlueSmirf. Mam program, który wysyła po prostu ciąg "Hello Bluetooth" do dowolnego urządzenia, do którego podłączony jest BlueSmirf. Oto program Arduino:

void setup() { Serial.begin (115200); int i; }

void loop() {Serial.print ("Hello Bluetooth!"); opóźnienie (1000); }

Jeden komputer terminal BT Widzę komunikat i nie ma problemu. Problem polega na moim kodzie androidowym. Mogę połączyć się z urządzeniem z Androidem, ale kiedy patrzę na dziennik, nie wyświetla się "Hello Bluetooth". Oto log debug:


04-09 16: 27: 49,022: ERROR/BTArduino (17288): FireFly-2583 podłączona
04-09 16: 27: 49,022: ERROR/BTArduino (17288): od połącz gniazdo
04-09: 16: 27: 55,705: błąd/BTArduino (17288) Otrzymane: 16
04-09 16: 27: 56.702: błąd/BTArduino (17288) Otrzymane: 1
04- 09 16: 27: 56.712: BŁĄD/BTArduino (17288): Otrzymano: 15
04-09 16: 27: 57.702: BŁĄD/BTArduino (17288): Otrzymano: 1
04-09 16: 27: 57.702: BŁĄD/BTArduino (17288): Otrzymano: 15 09/04 16: 27: 58,704: błąd/BTArduino (17288) Otrzymane: 1
09/04 16: 27: 58,704: błąd/BTArduino (17288) Otrzymane: 15

itd ...

Oto kod, staram się umieścić tylko kod względną ale jeśli potrzebujesz więcej proszę dać mi znać:

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... 

Im bardziej względna jest kod tutaj:

 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"); 
       } 
      } 

Czytam bytes = inStream.read (bufor). Wiem, że bajty są liczbą całkowitą, więc próbowałem wysyłać liczby całkowite przez bluetooth, ponieważ "bajtów" było liczbą całkowitą, ale nadal nie ma sensu.

Wygląda na to, że wysyłana jest nieprawidłowa prędkość transmisji. Czy to może być prawda?

Każda pomoc zostanie doceniona. Dziękuję Ci bardzo.

+0

Zamiast tego spróbuj użyć komendy writeln/readln. –

Odpowiedz

1

read() zwraca liczbę bajtów odczytanych z powodzeniem do bufora. Dlatego w tej linii kodu:

bytes = inStream.read(buffer); 

... Twoja wiadomość znajdzie się w pierwszych bytes bajtów buffer (zakładając, że wszystko jest poprawne).Można przekonwertować te do String tak:

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

mam tuszowanie wiele rzeczy tutaj (kodowanie, łącząc wiele buforów itp), ale to powinno Ci zacząć.