私は合計午前中です。私の目標は、udpにセンサデータ(ジャイロ付きの磁石)を送ることです。反対側では、MATLABは、データを受信するつもりです。udpでセンサー値を送信する方法
- センサーが登録されていない場合は、udpパケットを送信できます。
- udpを使用してデータを送信しないと、センサーを表示できます。
- 私は同時に両方を行うことはできません!
このコードは加速度計を読み取って表示し、2000ミリ秒ごとにあらかじめ定義されたudpパケットを非同期に送信しようとしています。 しかし、それは実行に失敗します!助言がありますか?私はそれがあなたを/起きていないされているものについて、より具体的な情報を提供するかどうかを確認するために、デバッガでコードをステップ実行することをお勧め
public class udp_sensors_matlab extends Activity implements SensorEventListener{
/** Called when the activity is first created. */
SensorManager sensorManager = null;
//for accelerometer values
TextView outputX;
TextView outputY;
TextView outputZ;
String messageStr="test udp";
String ip;
udpOut task;
int server_port = 12345;
DatagramSocket s = null;
int msg_length=messageStr.length();
byte[] message = messageStr.getBytes();
InetAddress local = null;
DatagramPacket p=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//just some textviews, for data output
outputX = (TextView) findViewById(R.id.TextView01);
outputY = (TextView) findViewById(R.id.TextView02);
outputZ = (TextView) findViewById(R.id.TextView03);
try {
s = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
local = InetAddress.getByName("81.31.187.32");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
task = new udpOut();
task.execute("g");
timer= new Timer();
timerTask=new TimerTask(){ @Override
public void run() {
// TODO Auto-generated method stub
task = new udpOut();
task.execute("g");
}};
timer.scheduleAtFixedRate(timerTask, 2000, 2000);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onStop() {
super.onStop();
sensorManager.unregisterListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
}
synchronized public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
outputX.setText("\tx:"+Float.toString(event.values[0]));
outputY.setText("\ty:"+Float.toString(event.values[1]));
outputZ.setText("\tz:"+Float.toString(event.values[2]));
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
class udpOut extends AsyncTask <String, Integer, Long> {
protected Long doInBackground(String... messageStr) {
p = new DatagramPacket(message, msg_length,local,server_port);
try {
s.send(p);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void onProgressUpdate() {
}
}
こんにちは、あなたのコードを修正することができましたか?私は同じことをしている、それはあなたがそれを固定する方法を共有することができればいいかもしれない;おかげでバディ:) –