Java 用arduino开发android
所以我对Java和android开发还不熟悉。到目前为止,我一直在创建一个能够连接arduino并与之交互的应用程序。我有一个方法,可以从arduino读取数据(以字节为单位),然后以UTF-8的字符串形式打印数据……然而,我只是希望这个方法能够读取和解释数据,并且可以从另一个方法调用解释后的数据,比如安卓的按钮。下面是读取数据的代码Java 用arduino开发android,java,android,methods,arduino-uno,Java,Android,Methods,Arduino Uno,所以我对Java和android开发还不熟悉。到目前为止,我一直在创建一个能够连接arduino并与之交互的应用程序。我有一个方法,可以从arduino读取数据(以字节为单位),然后以UTF-8的字符串形式打印数据……然而,我只是希望这个方法能够读取和解释数据,并且可以从另一个方法调用解释后的数据,比如安卓的按钮。下面是读取数据的代码 public class MainActivity extends AppCompatActivity { public final String Act
public class MainActivity extends AppCompatActivity {
public final String Action_USB_Permission = "com.example.myapplication.USB_PERMISSION";
UsbManager usbManager;
UsbDevice device;
UsbSerialDevice serial;
UsbDeviceConnection connection;
String data;
String adata;
TextView textView;
Button tempButton
UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] arg0) {
try {
data = new String(arg0, "UTF-8"); //edit (removed String in "String data =" )
} catch (UnsupportedEncodingException e) {
e.getStackTrace();
}
}
};
// Serial codes and commands
public void pushcmd(String command) { //command for serial
serial.write(command.getBytes());
}
public void gettemp() {
pushcmd("T\n");
serial.read(mCallback);
adata = data;
}
//This is for the app creation i think
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usbManager = (UsbManager) getSystemService(this.USB_SERVICE);
tempButton = (Button) findViewById(R.id.buttontemp);
}
public void onClickTemp(View view) { //This is the command to print data
gettemp();
tvAppend(textView, "\n Measured temperature \n" + adata);
}
private void tvAppend(TextView tv, CharSequence text) {
final TextView ftv = tv;
final CharSequence ftext = text;
runOnUiThread(new Runnable() {
@Override
public void run() {
ftv.append(ftext);
}
});
}
}
tvAppend是一种在屏幕上的文本视图上打印字符串的方法。
我从那里得到了图书馆,上面说只要用
read(mcallback),我已经尝试了这个命令,但是我收到了一个“测量的temperaturenull”,然后从onReceivedData方法打印测量值。如果您有任何建议,我们将不胜感激。如果我不清楚,请告诉我,我会尝试进一步澄清
编辑:我添加了tvAppend方法,定义了一个textview字段和一个按钮。我还指出,我没有包括整个程序,我遵循了所有关于电路的实现,再次感谢反馈
关于编辑的注释:当代码更改为上面的方式时。adata不显示,仅显示“测量温度” 我认为你对这里的数据流感到困惑
pushcmd
TextView
public void onClickTemp(View view) {
pushcmd("T\n");
serial.read(new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] arg0) {
try {
// Here, you are guaranteed some data
String data = new String(arg0, "UTF-8");
tvAppend(textView, "\n Measured temperature \n" + data);
} catch (UnsupportedEncodingException e) {
e.getStackTrace();
}
}
});
}
尝试从
String data=
中删除String
。此外,您似乎还缺少创建一个字符串的完整部分。您缺少textView变量和tvAppendmethod@cricket_007谢谢你让我知道你不够清楚。我还尝试从字符串数据中删除字符串=您从未初始化textview?是的,我已初始化textview。我只是以前没有在帖子上展示。
public void onClickTemp(View view) {
pushcmd("T\n");
serial.read(new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] arg0) {
try {
// Here, you are guaranteed some data
String data = new String(arg0, "UTF-8");
tvAppend(textView, "\n Measured temperature \n" + data);
} catch (UnsupportedEncodingException e) {
e.getStackTrace();
}
}
});
}