Arduino Serial.println() и com.pi4j.wiringpi.Serial - странный порядок чтения или чтение только нечетных байтов?
Адаптируясь из библиотеки PI4J ( WiringPiSerialExample), у меня есть этот небольшой отрывок для чтения данных, отправляемых в Raspberry serial. Последовательное соединение осуществляется непосредственно от tx - rx на Teensy (используя Serial 5) к UART, соответствующему rx tx на Raspberry Pi (Raspberry zero w).
Строки ниже выполняются в цикле с интервалом в 20 миллисекунд.
static void getByte(){
/* DATA RECEIVED FROM MICROCONTROLLER */
int dataavail = Serial.serialDataAvail(fileDescriptor);
while( dataavail > 0){
byte data = Serial.serialGetByte(fileDescriptor);
if( data == 10 ){
System.out.println(new String(bbuffer));
for(int i = 0; i < bytesRead; i++){
System.out.print(bbuffer[i] + " ");
}
System.out.println( "number of bytes:" + bytesRead);
bytesRead = 0;
bbuffer = new byte[1024];
}
else{
bbuffer[bytesRead] = data;
bytesRead++;
}
dataavail = Serial.serialDataAvail(fileDescriptor);
}
}
Это цикл на стороне Arduino, отправляющий массив байтов в этом первом примере:
void loop() {
delay(1000);
byte buff[] = {48,49,50,51,52,53,10};
Serial5.write(buff,7);
}
Выходные данные на консоли Java-апплета:
135024
49 51 53 48 50 52 number of bytes:6
Пока я не могу быть уверен, почему заказ изменился. Но возьмем следующий пример, запустив эту модификацию в цикле arduino. Я не уверен, как объяснить, что происходит
void loop() {
delay(1000);
Serial5.println("a b c d e f");
}
это выводит.
abcdef
32 32 32 32 32 13 97 98 99 100 101 102 number of bytes:12
Я могу получить только этот вывод, вставив один символ в середине других. Если я уберу пробел между символами ("a b c d e f") to ("abcdef")
выход:
bdf
98 100 102 number of bytes:3
Как я могу отладить это поведение или как правильно с этим бороться?