Взаимодействие Android Nexus One с Arduino + BlueSmirf

Я немного новичок в этом, так что медведь со мной - я бы очень признателен за вашу помощь.

Я пытаюсь связать Android Nexus One с arduino (Duemilanove), который подключен к BlueSmirf. У меня есть программа, которая просто выводит строку "Hello Bluetooth" на любое устройство, к которому подключен BlueSmirf. Вот программа Arduino:

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

void loop() {Serial.print( "Hello Bluetooth!" ); Задержка (1000); }

Один терминал моего компьютера BT Я вижу сообщение и не подключаюсь без проблем. Проблема связана с моим кодом Android. Я могу подключиться к устройству с помощью android, но когда я смотрю на журнал, он не отображает "Hello Bluetooth". Вот журнал отладки:


04-09 16: 27: 49.022: ERROR/BTArduino (17288): FireFly-2583 подключен
04-09 16: 27: 49.022: ОШИБКА/БТАРДИИНО (17288): НАЧАТЬ ПОДКЛЮЧИТЬ РОКЕТ
04-09 16: 27: 55.705: ERROR/BTArduino (17288): Поступило в редакцию: 16
04-09 16: 27: 56.702: ERROR/BTArduino (17288): Поступило в редакцию: 1
04-09 16: 27: 56.712: ERROR/BTArduino (17288): Поступило в редакцию: 15
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Поступило в редакцию: 1
04-09 16: 27: 57.702: ERROR/BTArduino (17288): Поступило в редакцию: 15
04-09 16: 27: 58.704: ERROR/BTArduino (17288): Поступило в редакцию: 1
04-09 16: 27: 58.704: ERROR/BTArduino (17288): Поступило в редакцию: 15

ЭСТ...

Вот код, я пытаюсь поместить только относительный код, но если вам нужно больше, пожалуйста, дайте мне знать:

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

Более относительный код здесь:

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

Я читаю bytes = inStream.read(buffer). Я знаю, что байты являются целыми числами, поэтому я попытался отправить целые числа по bluetooth, потому что "байты" были целыми числами, но это все еще не имело смысла.

Похоже, что отправляет неверную скорость в бодах. Может ли это быть правдой?

Любая помощь будет оценена по достоинству. Большое вам спасибо.

Ответ 2

read() возвращает количество байтов, которые оно успешно прочитало в буфере. Поэтому в этой строке кода:

bytes = inStream.read(buffer);

... ваше сообщение будет найдено в первых bytes байтах buffer (при условии, что все остальное будет правильным). Вы можете преобразовать их в строку так:

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

Я замалчиваю несколько вещей здесь (кодирование, объединение нескольких буферов и т.д.), но это должно заставить вас начать.