我正在开展一个涉及Android Uno和Android手机之间通信的项目。手机发出请求信号" *"一旦收到,Arduino就会在循环中发送随机整数。现在,Android设备正在接收消息,但它显示为带框的问号,并且没有收到所有消息。有任何想法吗?非常感谢你!
Arduino代码:
#include <SoftwareSerial.h>
const int RX_PIN = 0;
const int TX_PIN = 1;
SoftwareSerial bluetooth(RX_PIN, TX_PIN);
char commandChar;
void setup (){
bluetooth.begin (9600);
Serial.begin(38400);
}
void loop () {
if(bluetooth.available()){
commandChar = bluetooth.read();
switch(commandChar){
case '*':
Serial.println("Got the request code");
for(int i = 0; i < 10; i++){
bluetooth.print(random(21));
}
break;
}
}
}
Android代码:
public void run() {
initializeConnection();
byte[] buffer = new byte[256];
int bytes;
// Keep looping to listen for received messages
while (true) {
try {
bytes = mmInStream.read(buffer);//read bytes from input buffer
String readMessage = new String(buffer, 0, bytes);
Log.e("Received Message: ", readMessage);
} catch (IOException e) {
break;
}
}
}
public void initializeConnection() {
try {
PrintWriter out;
out = new PrintWriter(mmOutStream, true);
out.println("*");
out.flush();
}catch (NullPointerException NPE) {
}
}
控制台输出:
08-13 19:02:46.546 4019-4128/? E/Received Message:: �
08-13 19:02:46.596 4019-4128/? E/Received Message:: ����
答案 0 :(得分:0)
啊我觉得我发现了问题。随机数正从arduino发送到应用程序,应用程序将这些字节记录为ascii文字。不要发送随机数,而是尝试发送格式正确的ascii(可视字符)。
您可以为“hello”发送十六进制字节[0x68,0x65,0x6c,0x6c,0x6f],或使用SoftwareSerialPrint的内置HEX选项。
所以改成它,看看是否有效。
Register(Type, IEnumerable<Type>)
编辑:
让我们在应用程序端尝试这个。这会将接收到的字节转换为十六进制字符串表示形式,因此我们可以在ascii中正确地看到它。
bluetooth.print(random(21), HEX);