【发布时间】:2018-12-13 21:13:05
【问题描述】:
我正在尝试通过 Raspberry Pi 上的串口与 Simplebgc 板进行通信。我正在向似乎正在工作的板上写命令,但我需要帮助解码二进制响应。当指南似乎添加到 18 时,为什么我得到 23 个轮空?我是 C 和二进制的新手。
void sendCommand() {
int fd;
if ((fd = serialOpen ("/dev/ttyS0", 115200)) < 0) {
//fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno));
cout<<"Unable to open serial device"<<endl;
return;
}
unsigned char motor_on[6] = {0x3E, 0x4D, 0x01, 0x4E,0x01, 0x01}; //MOTOR ON
unsigned char motor_off[6] = {0x3E, 0x6D, 0x01, 0x6E,0x01, 0x01}; //MOTOR OFF
unsigned char board_info[6] = {0x3E, 0x56, 0x01, 0x57, 0x01, 0x01}; //BOARD_INFO
serialFlush(fd);
// Send command to grab board info
write(fd, board_info, 6);
sleep(2);
// Read board response and print it
char c;
int counter = 0;
while (read(fd, &c, 1) == 1) {
//putchar(c); // print out char
printf("%d ",c);
counter++;
}
cout<<"\ncounter="<<counter<<endl;
sleep(5);
}
int main() {
sendCommand();
return 0;
}
输出:
pi@raspberrypi:~/myPrograms/SerialGPIOExamples/c++/SBGC_board $ ./serialSBGCTest 62 86 18 104 30 70 10 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 137 计数器=23
【问题讨论】:
-
你的调试输出绝对没用。您正在打印一长串数字,但您不知道从板上收到的数字是什么。例如,
628- 您收到的是 6,然后是 28、62,然后是 8,还是 6,然后是 2,然后是 8? -
这样做的正确方法是什么?
-
更新了我的问题。 %d 是否应该按照手册中的说明正确打印出十进制数字?
标签: c++ raspberry-pi serial-port binary-data