2013-03-06 64 views
1

因此,对于我的研究,我必须将加速计数据作为恒定流发送到arduino mega。我已经通过串口将模块连接到了arduino。但是,当我运行代码时,它只运行一次。我试图将代码中的蓝牙连接部分放在我的代码的准确性更改部分,但它会冻结设备。这里是我的代码:从Arduino的蓝牙只发送一次传感器数据

package com.example.arduino_bluetooth2; 

//================================================================================================= 
//Imports 
//================================================================================================= 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Set; 
import java.util.UUID; 
import android.os.Bundle; 
import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.view.Menu; 
import android.widget.TextView; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 

public class MainActivity extends Activity implements SensorEventListener { 

    // Setup necessary sensor objects 
    private Sensor acc; 
    private SensorManager sm; 
    private TextView t1; 
    private double value; 
    // Bluetooth Object 
    private BluetoothAdapter bAdapter; 
    private BluetoothDevice device; 
    private BluetoothSocket mmServerSocket; 
    private OutputStream btoutput; 
    private static final UUID SPP_UUID = UUID 
      .fromString("00001101-0000-1000-8000-00805F9B34FB"); 
    private static final int DISCOVERY_REQUEST = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     accelerometer_initialization(); 
     bluetooth_initialization(); 
    } 

    // Setsup the accelerometer object 
    private void accelerometer_initialization() { 
     sm = (SensorManager) getSystemService(SENSOR_SERVICE); 
     acc = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sm.registerListener(this, acc, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    // Setup bluetooth object 
    private void bluetooth_initialization() { 
     bAdapter = BluetoothAdapter.getDefaultAdapter(); 
     startActivityForResult(new Intent(
       BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE), 
       DISCOVERY_REQUEST); 
     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     registerReceiver(mReceiver, filter); 
     bAdapter.startDiscovery(); 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     value = event.values[0]; 
    } 

    @Override 
    public void onAccuracyChanged(Sensor arg0, int arg1) { 
    } 

    final BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     public void onReceive(Context context, Intent intent) { 
      if (BluetoothDevice.ACTION_FOUND.equals(intent.getAction())) { 
       device = intent 
         .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       if (new String(device.getName()).equals("BT UART")) { 
        bAdapter.cancelDiscovery(); 

        try { 
         BluetoothSocket test = null; 
         test = device 
           .createInsecureRfcommSocketToServiceRecord(SPP_UUID); 
         mmServerSocket = test; 
         mmServerSocket.connect(); 
         String message = Double.toString(value); 
         byte[] send = message.getBytes(); 
         btoutput = mmServerSocket.getOutputStream(); 
         btoutput.write(send); 
         btoutput.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      } 
     }; 
    }; 
} 

回答

-1

看看这个页面:http://arduino.cc/en/Reference/Loop 的问题是,因为它不是在永远继续,直到设备被关闭或以其他方式讲了一个循环,那就只一次。

0

我不确定你应该在广播接收器中创建并连接蓝牙套接字。我在活动的onResume()中进行蓝牙连接管理。

此外,我使用一个线程来管理从Arduino和设备之间的串行数据连接获取数据,它被衍生并在后台连续运行。还有就是要向外发送数据,我从活动

/* Call this from the main activity to send data to the remote device */ 
    public void write(String message) { 
     System.out.println("...Data to send: " + message + "..."); 
     byte[] msgBuffer = message.getBytes(); 
     try { 
      mmOutStream.write(msgBuffer); 
     } catch (IOException e) { 
      System.out.println("...Error data send: " + e.getMessage() + "...");  
      } 
    } 

则胎面的run()方法调用写入方法负责获取数据的回

见我的回答了这一主题为例 Error with receiving xml strings via bluetooth in Android

祝你好运!