android 使用 arduino 开发
android development with arduino
所以我是 Java 和 android 开发的新手。到目前为止,我一直在创建一个能够与 arduino 连接和交互的应用程序。我有一种方法能够从 arduino 中读取数据(以字节为单位),然后将数据打印为 UTF-8 中的字符串....但是,我只是希望这种方法能够读取和解释数据,并具有解释的数据可以从另一个方法调用,比如来自 android 的按钮。以下是读取数据的代码。
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 是一种在屏幕上的文本视图上打印字符串的方法。
我从 https://github.com/felHR85/UsbSerial 获得了库,它说只需用
引用它
serial.read(mcallback),我试过这个命令,但我收到一个 "measured temperaturenull",然后打印测量值,它来自 onReceivedData 方法。如果我不清楚,请提出任何建议 appreciated.Or,让我知道,我会尽力解决更多问题。
编辑:我添加了我的 tvAppend 方法,定义了一个文本视图字段和一个按钮。我还指出我没有包含整个程序,我遵循了所有关于电路的实现 http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/ 再次感谢您的反馈
关于编辑的评论:当代码更改为上面的样子时。没有显示 adata,只有 "Measured temperature"。
我认为您对此处的数据流感到困惑。
- 您单击应用程序上的按钮
- 它调用
pushcmd
到 Arduino
- Arduino 会在未来的某个未知时间发回一些数据
- 您读取该数据并更新
TextView
现在,有了这个逻辑,代码的结构就可以像这样了。 (随意重新组织回您的应用程序)。
public void onClickTemp(View view) {
gettemp();
// No value of "adata" or "data" is guaranteed here
}
public void gettemp() {
pushcmd("T\n");
serial.read(mCallback); // asynchronous callback
// No value of "adata" or "data" is guaranteed here, either
}
UsbSerialInterface.UsbReadCallback mCallback = 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();
}
}
};
或者,如果您想将所有这些都折叠成一个方法,那么
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();
}
}
});
}
所以我是 Java 和 android 开发的新手。到目前为止,我一直在创建一个能够与 arduino 连接和交互的应用程序。我有一种方法能够从 arduino 中读取数据(以字节为单位),然后将数据打印为 UTF-8 中的字符串....但是,我只是希望这种方法能够读取和解释数据,并具有解释的数据可以从另一个方法调用,比如来自 android 的按钮。以下是读取数据的代码。
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 是一种在屏幕上的文本视图上打印字符串的方法。 我从 https://github.com/felHR85/UsbSerial 获得了库,它说只需用
引用它serial.read(mcallback),我试过这个命令,但我收到一个 "measured temperaturenull",然后打印测量值,它来自 onReceivedData 方法。如果我不清楚,请提出任何建议 appreciated.Or,让我知道,我会尽力解决更多问题。
编辑:我添加了我的 tvAppend 方法,定义了一个文本视图字段和一个按钮。我还指出我没有包含整个程序,我遵循了所有关于电路的实现 http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/ 再次感谢您的反馈
关于编辑的评论:当代码更改为上面的样子时。没有显示 adata,只有 "Measured temperature"。
我认为您对此处的数据流感到困惑。
- 您单击应用程序上的按钮
- 它调用
pushcmd
到 Arduino - Arduino 会在未来的某个未知时间发回一些数据
- 您读取该数据并更新
TextView
现在,有了这个逻辑,代码的结构就可以像这样了。 (随意重新组织回您的应用程序)。
public void onClickTemp(View view) {
gettemp();
// No value of "adata" or "data" is guaranteed here
}
public void gettemp() {
pushcmd("T\n");
serial.read(mCallback); // asynchronous callback
// No value of "adata" or "data" is guaranteed here, either
}
UsbSerialInterface.UsbReadCallback mCallback = 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();
}
}
};
或者,如果您想将所有这些都折叠成一个方法,那么
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();
}
}
});
}