2017-05-14 4 views
0

Ich versuche, eine serielle Daten mit 4 Zeichen von Arduino an den Raspberry Pi mit den folgenden Codes zu lesen.JAVA - Serielle Daten empfangen ungültiges Zeichen

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); 

jedoch auf das „tempString“ zu lesen, es zeigt diese an Stelle der von dem Arduino gesendeten Daten.

Der Arduino sendet die richtigen Daten, so glaube ich nicht, dass das Problem in Arduino ist. Dieser Code funktioniert mit 1-Zeichen-Daten. Was denkst du ist falsch mit diesen Codes?

P.S. Die Codes funktionieren, wenn sie in einer Schleife ausgeführt werden, obwohl die erste Ausführung ungültige Zeichen ausgibt

Antwort

0

Das obige Problem kann aufgrund eines nicht kompatiblen Zeichensatzes auftreten.

Wenn Sie pi4j für die serielle Kommunikation verwenden, ist die folgende Methode veraltet.

Serial.serialGetchar(serialPort) 

Ich schlage vor, Sie

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

mit

dann Byte-Array in String konvertieren

mit
public String(byte[] bytes,Charset charset) 

Ich empfehle UTF 8. Sie mehrere Zeichensätze können versuchen, die Ihren Bedarf passt .

[Bitte fühlen Sie sich frei, diese Antwort zu bearbeiten es nützlicher machen]

+0

ich beide UTF-8 und ISO-8858-1 und beide gedruckten leere Ausgänge verwendet. Weißt du wie ich das lösen kann oder wie kann ich wissen, welchen Zeichensatz ich benutzen soll? Danke –

+0

Versuchen Sie US-ASCII. Nur eine Vermutung von https://www.arduino.cc/en/Tutorial/SerialCallResponseASCII –

+0

Ich versuchte US-ASCII und die Ausgabe ist immer noch leer. Obwohl dies das Problem, das ich habe, nicht löst, habe ich anfangs meinen Code am Anfang meines Projekts ausgeführt und die Ausgabe verworfen, da nur die erste Ausführung unzulässige Zeichen enthält. Die nächsten Ausführungen oder Instanzen der Codes Ausgabe sind alle in Ordnung. –

Verwandte Themen