2013-03-06 4 views
1

내 연구를 위해, 가속도계 데이터를 지속적인 스트림으로 아두 이노 메가에 보내야합니다. 모듈을 시리얼을 통해 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

행운을 빌어 요!

관련 문제