2014-04-03 157 views
0

我下載的代碼草圖6:發送接收字節從這個網站:http://arduinobasics.blogspot.com.tr/2013/03/arduinobasics-bluetooth-android_25.html我可以看到「設備發現:(設備名稱),發現我的屏幕上。但我無法連接到設備(我嘗試連接到銀河S4 HC05藍牙模塊)(我從來沒有見過紫屏我剛綠色,我覺得問題是後「foundDevice = TRUE;」請檢查,它的我最後一年的項目,我不能做任何事情,沒有它:(無法(從手機到HC-05)連接到藍牙設備

`/ * SendReceiveBytes:撰稿ScottC於2013年3月25日使用 處理版本2.0b8 測試上三星Galaxy SII,與Android版本2.3.4 Android的ADK - 10 API SDK平臺*/

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.widget.Toast; 
import android.view.Gravity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import java.util.UUID; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 

import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 
public BluetoothSocket scSocket; 


boolean foundDevice=false; //When true, the screen turns green. 
boolean BTisConnected=false; //When true, the screen turns purple. 
String serverName = "ArduinoBasicsServer"; 

// Message types used by the Handler 
public static final int MESSAGE_WRITE = 1; 
public static final int MESSAGE_READ = 2; 
String readMessage=""; 

//Get the default Bluetooth adapter 
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); 

/*The startActivityForResult() within setup() launches an 
Activity which is used to request the user to turn Bluetooth on. 
The following onActivityResult() method is called when this 
Activity exits. */ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (requestCode==0) { 
if (resultCode == RESULT_OK) { 
ToastMaster("Bluetooth has been switched ON"); 
} 
else { 
ToastMaster("You need to turn Bluetooth ON !!!"); 
} 
} 
} 


/* Create a BroadcastReceiver that will later be used to 
receive the names of Bluetooth devices in range. */ 
BroadcastReceiver myDiscoverer = new myOwnBroadcastReceiver(); 


/* Create a BroadcastReceiver that will later be used to 
identify if the Bluetooth device is connected */ 
BroadcastReceiver checkIsConnected = new myOwnBroadcastReceiver(); 


// The Handler that gets information back from the Socket 
private final Handler mHandler = new Handler() { 
@Override 
public void handleMessage(Message msg) { 
switch (msg.what) { 
case MESSAGE_WRITE: 
//Do something when writing 
break; 
case MESSAGE_READ: 
//Get the bytes from the msg.obj 
byte[] readBuf = (byte[]) msg.obj; 
// construct a string from the valid bytes in the buffer 
readMessage = new String(readBuf, 0, msg.arg1); 
break; 
} 
} 
}; 


void setup() { 
orientation(LANDSCAPE); 
/*IF Bluetooth is NOT enabled, then ask user permission to enable it */ 
if (!bluetooth.isEnabled()) { 
Intent requestBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
startActivityForResult(requestBluetooth, 0); 
} 


/*If Bluetooth is now enabled, then register a broadcastReceiver to report any 
discovered Bluetooth devices, and then start discovering */ 
if (bluetooth.isEnabled()) { 
registerReceiver(myDiscoverer, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 
registerReceiver(checkIsConnected, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED)); 

//Start bluetooth discovery if it is not doing so already 
if (!bluetooth.isDiscovering()) { 
bluetooth.startDiscovery(); 
} 
} 
} 


void draw() { 
//Display a green screen if a device has been found, 
//Display a purple screen when a connection is made to the device 
if (foundDevice) { 
if (BTisConnected) { 
background(170, 50, 255); // purple screen 
} 
else { 
background(10, 255, 10); // green screen 
} 
} 

//Display anything received from Arduino 
text(readMessage, 10, 10); 
} 


/* This BroadcastReceiver will display discovered Bluetooth devices */ 
public class myOwnBroadcastReceiver extends BroadcastReceiver { 
ConnectToBluetooth connectBT; 

@Override 
public void onReceive(Context context, Intent intent) { 
String action=intent.getAction(); 
ToastMaster("ACTION:" + action); 

//Notification that BluetoothDevice is FOUND 
if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
//Display the name of the discovered device 
String discoveredDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); 
ToastMaster("Discovered: " + discoveredDeviceName); 

//Display more information about the discovered device 
BluetoothDevice discoveredDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
ToastMaster("getAddress() = " + discoveredDevice.getAddress()); 
ToastMaster("getName() = " + discoveredDevice.getName()); 

int bondyState=discoveredDevice.getBondState(); 
ToastMaster("getBondState() = " + bondyState); 

String mybondState; 
switch(bondyState) { 
case 10: 
mybondState="BOND_NONE"; 
break; 
case 11: 
mybondState="BOND_BONDING"; 
break; 
case 12: 
mybondState="BOND_BONDED"; 
break; 
default: 
mybondState="INVALID BOND STATE"; 
break; 
} 
ToastMaster("getBondState() = " + mybondState); 

//Change foundDevice to true which will make the screen turn green 
foundDevice=true; 

//Connect to the discovered bluetooth device (SeeedBTSlave) 
if (discoveredDeviceName.equals("SeeedBTSlave")) { 
ToastMaster("Connecting you Now !!"); 
unregisterReceiver(myDiscoverer); 
connectBT = new ConnectToBluetooth(discoveredDevice); 
//Connect to the the device in a new thread 
new Thread(connectBT).start(); 
} 
} 

//Notification if bluetooth device is connected 
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { 
ToastMaster("CONNECTED _ YAY"); 

while (scSocket==null) { 
//do nothing 
} 
ToastMaster("scSocket" + scSocket); 
BTisConnected=true; //turn screen purple 
if (scSocket!=null) { 
SendReceiveBytes sendReceiveBT = new SendReceiveBytes(scSocket); 
new Thread(sendReceiveBT).start(); 
String red = "r"; 
byte[] myByte = stringToBytesUTFCustom(red); 
sendReceiveBT.write(myByte); 
} 
} 
} 
} 
public static 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; 
} 

public class ConnectToBluetooth implements Runnable { 
private BluetoothDevice btShield; 
private BluetoothSocket mySocket = null; 
private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

public ConnectToBluetooth(BluetoothDevice bluetoothShield) { 
btShield = bluetoothShield; 
try { 
mySocket = btShield.createRfcommSocketToServiceRecord(uuid); 
} 
catch(IOException createSocketException) { 
//Problem with creating a socket 
Log.e("ConnectToBluetooth", "Error with Socket"); 
} 
} 

@Override 
public void run() { 
/* Cancel discovery on Bluetooth Adapter to prevent slow connection */ 
bluetooth.cancelDiscovery(); 

try { 
/*Connect to the bluetoothShield through the Socket. This will block 
until it succeeds or throws an IOException */ 
mySocket.connect(); 
scSocket=mySocket; 
} 
catch (IOException connectException) { 
Log.e("ConnectToBluetooth", "Error with Socket Connection"); 
try { 
mySocket.close(); //try to close the socket 
} 
catch(IOException closeException) { 
} 
return; 
} 
} 

/* Will cancel an in-progress connection, and close the socket */ 
public void cancel() { 
try { 
mySocket.close(); 
} 
catch (IOException e) { 
} 
} 
} 


private class SendReceiveBytes implements Runnable { 
private BluetoothSocket btSocket; 
private InputStream btInputStream = null; 
private OutputStream btOutputStream = null; 
String TAG = "SendReceiveBytes"; 

public SendReceiveBytes(BluetoothSocket socket) { 
btSocket = socket; 
try { 
btInputStream = btSocket.getInputStream(); 
btOutputStream = btSocket.getOutputStream(); 
} 
catch (IOException streamError) { 
Log.e(TAG, "Error when getting input or output Stream"); 
} 
} 


public void run() { 
byte[] buffer = new byte[1024]; // buffer store for the stream 
int bytes; // bytes returned from read() 

// Keep listening to the InputStream until an exception occurs 
while (true) { 
try { 
// Read from the InputStream 
bytes = btInputStream.read(buffer); 
// Send the obtained bytes to the UI activity 
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) 
.sendToTarget(); 
} 
catch (IOException e) { 
Log.e(TAG, "Error reading from btInputStream"); 
break; 
} 
} 
} 


/* Call this from the main activity to send data to the remote device */ 
public void write(byte[] bytes) { 
try { 
btOutputStream.write(bytes); 
} 
catch (IOException e) { 
Log.e(TAG, "Error when writing to btOutputStream"); 
} 
} 


/* Call this from the main activity to shutdown the connection */ 
public void cancel() { 
try { 
btSocket.close(); 
} 
catch (IOException e) { 
Log.e(TAG, "Error when closing the btSocket"); 
} 
} 
} 


/* My ToastMaster function to display a messageBox on the screen */ 
void ToastMaster(String textToDisplay) { 
Toast myMessage = Toast.makeText(getApplicationContext(), 
textToDisplay, 
Toast.LENGTH_SHORT); 
myMessage.setGravity(Gravity.CENTER, 0, 0); 
myMessage.show(); 
}` 
+0

打招呼。感謝您的幫助。 :)我解決了我自己的問題。最後我找到了解決方案。但是Scott C打開了我的思路解決它(他說修改arduino代碼)。感謝Scott C;和解決方案如此簡單;只需更改BT設備的名稱因爲您的設備名稱是什麼。在我的情況下;我的BT設備名稱是HC-05。 「blueToothSerial.print(」 \ r \ N + STNA = HC-05 \ r \ n 「); //設置藍牙名稱爲」 SeeedBTSlave 你看到。它是這樣工作的。我終於到達了紫色的屏幕。對不起我的英文。我不是本地人。 – Burak

+0

歡迎來到SO!能否請您發表您的解決方案通過使用靠近頁面底部的「郵報答案」按鈕的答案嗎?謝謝! –

+0

@Burak可以請你告訴我,你會怎麼稱呼從主要活動SendReceiveBytes的write方法? – Muavia

回答

1

你好,我改變了代碼爲我的最後一年的項目準備。 我刪除相關的位RGB一些代碼。我建議你查看可鏈式RGB的數據表。看數據表的代碼底部,你會清楚地知道從哪裏來到另一個代碼。無論如何,它們都是 。我用伺服電機代替RGB。正如我之前所說,我將bt設備的名稱更改爲HC-05。

包括

#include <SoftwareSerial.h> 

//#define uint8 unsigned char 
//#define uint16 unsigned int 
//#define uint32 unsigned long int 

#define RxD 6 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD) 
#define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the Arduino (TxD) 

#define DEBUG_ENABLED 1 
Servo myservo ; 

int led = 9 ; 

SoftwareSerial blueToothSerial(RxD, TxD); 


/*----------------------SETUP----------------------------*/ 
void setup() { 
myservo.attach(10); 
myservo.write(0); 

Serial.begin(9600);//low Serial communication via USB cable to computer (if required) 
pinMode(RxD, INPUT); // Setup the Arduino to receive INPUT from the bluetooth shield on Digital Pin 6 
pinMode(TxD, OUTPUT); // Setup the Arduino to send data (OUTPUT) to the bluetooth shield on Digital Pin 7 
pinMode(13, OUTPUT); // Use onboard LED if required. 
pinMode(9,OUTPUT); 
setupBlueToothConnection(); //Used to initialise the Bluetooth shield 


} 


/*----------------------LOOP----------------------------*/ 
void loop() { 
digitalWrite(13, LOW); //Turn off the onboard Arduino LED 
char recvChar; 
while (1) { 
if (blueToothSerial.available()) {//check if there's any data sent from the remote bluetooth shield 
recvChar = blueToothSerial.read(); 
Serial.print(recvChar); // Print the character received to the Serial Monitor (if required) 

//If the character received = 'r' , then change the RGB led to display a RED colour 
if (recvChar=='r') { 
    myservo.write(100); 
// Send32Zero(); // begin 
// DataDealWithAndSend(255, 0, 0); // first node data 
// Send32Zero(); // send to update data 
digitalWrite(led,HIGH); 
delay(500); 

} 

//If the character received = 'g' , then change the RGB led to display a GREEN colour 
if (recvChar=='g') { 
    digitalWrite(led,LOW); 
    myservo.write(50); 


} 

//If the character received = 'b' , then change the RGB led to display a BLUE colour 
if (recvChar=='b') { 
// Send32Zero(); // begin 
// DataDealWithAndSend(0, 0, 255); // first node data 
// Send32Zero(); // send to update data 
digitalWrite(led,HIGH); 
myservo.write(180); 
} 

//If the character received = 'x' , then turn RGB led OFF 
if (recvChar=='x') { 
// Send32Zero(); // begin 
// DataDealWithAndSend(0, 0, 0); // first node data 
// Send32Zero(); // send to update data 
digitalWrite(led,LOW); 
myservo.write(0); 
} 
} 

//You can use the following code to deal with any information coming from the Computer (serial monitor) 
if (Serial.available()) { 
recvChar = Serial.read(); 

//This will send value obtained (recvChar) to the phone. The value will be displayed on the phone. 
blueToothSerial.print(recvChar); 
} 
} 
} 



//The following code is necessary to setup the bluetooth shield ------copy and paste---------------- 
void setupBlueToothConnection() 
{ 
blueToothSerial.begin(9600);// BluetoothBee BaudRate to default baud rate 38400 
blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode 
blueToothSerial.print("\r\n+STNA=HC-05\r\n"); //set the bluetooth name as "SeeedBTSlave" 
blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me 
blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here 
delay(2000); // This delay is required. 
blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
Serial.println("The slave bluetooth is inquirable!"); 
delay(2000); // This delay is required. 
blueToothSerial.flush(); 
} 
相關問題