有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

arduino JAVA串行数据接收非法字符

我正在尝试使用以下代码读取从Arduino发送到Raspberry Pi的带有4个字符的串行数据

int serialPort = Serial.serialOpen("/dev/ttyACM0",9600);
if(serialPort==-1){
    serialPort = Serial.serialOpen("/dev/ttyACM1",9600);
}    
char[] charArray = {' ', ' ', ' ', ' '}; //Initializing char array     
Serial.serialPuts(serialPort, 8 + "x"); //Sending Request Code to Arduino
int received = 0; 
while(received == 0){ //Wait for input
    for(int i = 0; i < 4; i++){
        charArray[i] = (char)Serial.serialGetchar(serialPort);
        received = 1;
    }
}
String tempString = new String(charArray);
System.out.println(tempString);

但是,在读取“tempString”时,它显示了以下内容���� 而不是Arduino发送的数据

Arduino正在发送正确的数据,所以我认为问题不在Arduino。此代码使用1个字符的数据。你认为这些代码有什么问题

另外,如果代码在循环中执行,则可以工作,尽管第一次执行会输出非法字符


共 (1) 个答案

  1. # 1 楼答案

    由于字符集不兼容,可能会出现上述问题

    如果您使用pi4j进行串行端口通信,则不推荐使用以下方法

    Serial.serialGetchar(serialPort)
    

    我建议你使用

    public static byte[] serialGetBytes(int fd,int length)

    然后使用

    public String(byte[] bytes,Charset charset)
    

    我建议使用UTF8。您可以尝试多个适合您需要的字符集

    [请随意编辑此答案,使其更有用]