2017-05-14 1 views
0

다음 코드를 사용하여 Arduino에서 Raspberry Pi로 보낸 4 자로 된 직렬 데이터를 읽으려고합니다.JAVA - 잘못된 데이터 수신 직렬 데이터

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가 보낸 데이터 대신이 shows이 표시됩니다.

Arduino가 적절한 데이터를 보내므로 문제가 Arduino에 있다고 생각하지 않습니다. 이 코드는 1 문자 데이터로 작동합니다. 이 코드가 무엇이라고 생각하십니까?

P. 첫 번째 실행에서 잘못된 문자가 출력 되더라도 코드는 루프에서 실행되면 작동합니다.

답변

0

위의 문제는 호환되지 않는 문자 집합으로 인해 발생할 수 있습니다.

직렬 포트 통신에 pi4j를 사용하는 경우, 다음 f}은 더 이상 사용되지 않습니다.

Serial.serialGetchar(serialPort) 

나는 당신이 당신의 요구에 맞는하는 여러 문자 집합을 시도 할 수 있습니다

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

그때 내가 UTF 8을 사용하는 것이 좋습니다

public String(byte[] bytes,Charset charset) 

를 사용하여 문자열로 바이트 배열을 변환 사용하는 것이 좋습니다 .

+0

나는 UTF-8과 ISO-8858-1을 모두 사용했으며 둘 다 빈 출력을 출력했습니다. 이 문제를 어떻게 해결할 수 있는지 또는 어떻게 사용할 문자셋을 알 수 있습니까? 감사합니다 –

+0

US-ASCII를 시도해보십시오. https://www.arduino.cc/en/Tutorial/SerialCallResponseASCII –

+0

에서 US-ASCII를 시도했지만 출력이 여전히 비어 있습니다. 이게 내가 가진 문제를 해결하는 것은 아니지만, 처음에는 프로젝트의 시작 부분에서 코드를 실행하고 첫 번째 실행에만 잘못된 문자가 있기 때문에 출력을 무시했습니다. 다음 실행이나 코드 출력의 인스턴스는 모두 괜찮습니다. –