我使用此代码接收arduino的单个字母我在电话文本查看器上看不到任何响应当我想要arduino发送字母'A'显示单词'ON'并且如果发送'Z'显示我关闭文本查看器中的单词
请注意,Android手机arduino之间的连接已成功,Android手机发送至arduino但未收到
class Ahmed extends Thread {
public void run() {
for (; ; ) {
try {
int bytesAvailable = btSocket.getInputStream().available();
byte []packetBytes= new byte[bytesAvailable];
if (bytesAvailable > 0) {
tb.setText(bytesAvailable+ "ok");
btSocket.getInputStream().read(packetBytes);
for(int i=0; i<bytesAvailable;i++)
{
if (packetBytes[i]==65)
tb.setText("ON");
else if (packetBytes[i] ==90)
tb.setText("off");
}
}
} catch (Exception e) {
}
}
}
}
arduino代码
#include<SoftwareSerial.h>
void setup() {
Serial3.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void loop() {
char x=Serial3.read();
if(x=='A')
{
digitalWrite(13,HIGH);
Serial3.print('A');
}
if(x=='Z')
{digitalWrite(13,LOW);
Serial3.print('Z');
}
}
答案 0 :(得分:1)
你正在从一个线程更新textview,它必须抛出一些异常,但由于你没有在 catch块中打印任何东西,你没有得到任何输出或错误或任何东西,总是记住,你无法从UI线程以外的任何线程更新视图。
try {
int bytesAvailable = btSocket.getInputStream().available();
byte []packetBytes= new byte[bytesAvailable];
if (bytesAvailable > 0) {
tb.setText(bytesAvailable+ "ok");
btSocket.getInputStream().read(packetBytes);
for(int i=0; i<bytesAvailable;i++)
{
if (packetBytes[i]==65)
tb.setText("ON");
else if (packetBytes[i] ==90)
tb.setText("off");
}
}
} catch (Exception e) {
// ADD THIS TO SEE ANY ERROR
e.printStackTrace();
}
如果您在活动类中运行此线程,则可以运行此
runOnUiThread(new Runnable() {
@Override
public void run() {
tb.setText("ON")
}
});
否则你必须使用广播接收器或界面实现一些机制,将数据传递到活动/片段,以更新里面的 textview 的 runOnUiThread 强>