0

目標:

BluetoothでAndroidに接続されているかどうかをardiunoに確認させる。次に、接続されている場合はアクションを実行し、接続されていない場合は再接続します。

私が使用しているもの:

Bluesmirf Silver と arduino uno および note 3

私がこれまでに行ったこと:

【ARDUINOコード】

Bluesmirf は、マスター モードの自動接続になっています。arduino は、Android アプリが H 文字を送信しているかどうかを確認することになっています。もしそうなら、それは接続されていることを意味します。そうでない場合は、再接続を続ける必要があります。

#include <SoftwareSerial.h>  
#include <TextFinder.h>

int bluetoothTx = 2;  // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3;  // RX-I pin of bluetooth mate, Arduino D3
boolean running = false;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{

Serial.begin(9600);             // Begin the serial monitor at 9600bps

bluetooth.begin(115200);        // The Bluetooth Mate defaults to 115200bps
bluetooth.print("$");           // Print three times individually
bluetooth.print("$");
bluetooth.print("$");           // Enter command mode
delay(100);                     // Short delay, wait for the Mate to send back CMD
bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
delay(100);
bluetooth.begin(9600);          // Start bluetooth serial at 9600

}

void loop()
{


//Check If Connected

if(bluetooth.available())  // If the bluetooth sent any characters
{
  //Check if bluetooth recieved an H and store in a value
  char val = bluetooth.read();

  if(val == 'H')
  {
       running = true;
  }
  else if(val != 'H')
  {
       running = false;
  }
}
else if(!bluetooth.available())
{
   running = false;
}

//Actions to perform if arduino is connected or not connected

if(running == true)
{
//It's connected so wait 5 seconds
delay(5000);
}
else if(running == false)
{
//It's not connected: Attempt to reconnect
bluetooth.print("$");  // Print three times individually
bluetooth.print("$");
bluetooth.print("$");  // Enter command mode
delay(100);  // Short delay, wait for the Mate to send back CMD
bluetooth.println("C,30196692D7C0");
delay(500);
bluetooth.println("---"); 
delay(3000);

}
}

【アンドロイドコード】

これは、アプリが接続されると H を送信する Android アプリのメソッドです。

private void sendMessage(BluetoothSocket socket, String msg) {
    OutputStream outStream;
    try {
        outStream = socket.getOutputStream();
        byte[] byteString = (msg).getBytes();
        outStream.write(byteString);
    } catch (IOException e) {
        Log.d("BLUETOOTH_COMMS", e.getMessage());
    }
}

サイドノート:

このarduinoが接続されているかどうかを確認するために、私は非常に多くのことを試みました。3 週間前にプログラミングを始めたばかりなので、ますます難しくなっています。どんな助けでも大歓迎です。

4

1 に答える 1

0

[UPDATE #1]

I've managed to send an 'h' with the android app with this snippet here:

//call send method to send this character over bluetooth
sendMessage(socket,"h");

//Method used to send 'h' over bluetooth
    private void sendMessage(BluetoothSocket socket, String msg) {
        OutputStream outStream;
        try {
            outStream = socket.getOutputStream();
            //byte[] byteString = (msg).getBytes();
            byte[] byteString = stringToBytesUTFCustom(msg);
            outStream.write(byteString);
        } catch (IOException e) {
            Log.d("BLUETOOTH_COMMS", e.getMessage());
        }
    }

//Method used to convert
public byte[] stringToBytesUTFCustom(String str) {
    char[] buffer = str.toCharArray();
    byte[] b = new byte[buffer.length << 1];
    for (int i = 0; i < buffer.length; i++) {
        int bpos = i << 1;
        b[bpos] = (byte) ((buffer[i]&0xFF00)>>8);
        b[bpos + 1] = (byte) (buffer[i]&0x00FF);
    }
    return b;
}

And with arduino I can properly read the 'h' using this snippet.

  if (bluetooth.available() > 0) {  // if the data came
    char incomingByte = bluetooth.read(); // read byte
    if(incomingByte == 'h') {
       running = true;
  }
  }

New Problem

I am having trouble telling when the arduino has lost connection with the android app.

于 2014-03-22T02:56:34.853 に答える