我想将手机连接到与Arduino相关联的蓝牙模块,发送数据,接收结果然后关闭连接。
有两种可能的行为:
1。行为
应用程序启动,移动设备连接到模块。当我按下按钮时,数据会被发送到我的模块。 Arduino处理传入的数据并通过相同的连接发回结果。此外,控制台发出数据已由我的手机发送和接收。
数据连接的工作方式与我想要的一样,但应该按下按钮而不是事先建立连接。
2。行为
应用程序启动时移动设备无法连接到模块。 一旦按下按钮,就会建立连接(不是事先!),并且将发送数据。 我知道Arduino正在接收这些数据,因为我将传入的数据打印到模块控制台中。 令人困惑的是,我的手机没有收到结果。
问题 为什么如果我事先没有建立连接但是只要按下按钮就会出现这种未收到数据的错误。
代码:
连接
public static void connect ( BluetoothDevice device ) {
try {
if ( Bluetooth.hasAdapter() ) {
if ( Bluetooth.adapter.isEnabled() ) {
Bluetooth.connected = device;
Bluetooth.socket = device.createRfcommSocketToServiceRecord( device.getUuids()[ 0 ].getUuid() );
Bluetooth.socket.connect();
}
}
} catch ( Exception exception ) {
exception.printStackTrace();
}
}
行为(发送和接收数据)
Bluetooth.connect( device );
Button button = ( ( Button ) this.findViewById( R.id.activate ) );
button.setOnClickListener( new View.OnClickListener () {
@Override
public void onClick ( View view ) {
Bluetooth.send( "#activate" );
}
} );
行为(发送但不接收数据)
Button button = ( ( Button ) this.findViewById( R.id.activate ) );
button.setOnClickListener( new View.OnClickListener () {
@Override
public void onClick ( View view ) {
Bluetooth.connect( device );
Bluetooth.send( "#activate" );
}
} );
〜提前致谢
修改 问题现在解决了。 这只是我的错。
当我从BluetoothSocket读取时,在第二种情况下发生了异常。 由于某种未知的原因,我没有打印异常,但突然出现了while循环。这意味着无法收集更多数据。
问题: 在我实际打开BluetoothSocket之前,我启动了收集器。不幸的是,收集器然后开始从一个关闭的Socket读取,这导致异常。我没有意识到这一点,因为我没有打印出通常不会发生在我身上的错误信息。