C++ Arduino-为什么串行数据以错误的顺序写入?
基本上,我在Bluno M3 Arduino上有以下代码:C++ Arduino-为什么串行数据以错误的顺序写入?,c++,c,arduino,serial-port,bluno,C++,C,Arduino,Serial Port,Bluno,基本上,我在Bluno M3 Arduino上有以下代码: #define MSG_LEN 2 unsigned char pixel; char buff[MSG_LEN]; int i; void setup() { Serial4.begin(9600); pixel=0xDD; } void loop() { if(Serial4.peek() == -1){ while(Serial4.available() < MSG_LEN); Ser
#define MSG_LEN 2
unsigned char pixel;
char buff[MSG_LEN];
int i;
void setup() {
Serial4.begin(9600);
pixel=0xDD;
}
void loop() {
if(Serial4.peek() == -1){
while(Serial4.available() < MSG_LEN);
Serial4.readBytes(buff, 2);
if(buff[0] == 0xC8 && buff[1] == 0x00){
//send image
Serial4.write(0xC7); //send Image ACK
Serial4.flush();
for(i=0;i<4800;i++){
Serial4.write(pixel);
Serial4.flush();
}
for(i=0;i<MSG_LEN;i++){
buff[i]=0xFF;
}
}
}else{
while(Serial4.available()>0){
Serial4.read();
}
}
}
#定义消息2
无符号字符像素;
字符buff[MSG_LEN];
int i;
无效设置(){
序列号4.开始(9600);
像素=0xDD;
}
void循环(){
if(Serial4.peek()=-1){
while(Serial4.available()您不指定像素变量,始终发送相同的值
只在传输结束时刷新串行。这应该有帮助。否则就是错误
做另一个测试:不要每次都发送相同的值。它将提供更多的诊断数据,感谢大家指出问题可能是PL2303模块。通过进一步的测试,我确认PL2303 USB适配器工作不正常
当我使用与Bluno arduino相同的串行监视器但在用于编程的同一COM端口上时,代码运行良好。这种奇怪的行为非常令人沮丧,但我感谢所有为我指出正确方向的人。pixel在设置()中被分配
。虽然重复发送相同的值可能没有什么好处,但我不确定这是否是手头上的问题-可能只是为了说明问题而使用了虚拟数据。虽然刷新是不必要的,但它不是一个错误,否则它会破坏缓冲I/O的任何好处。如果有任何问题,它应该保证连续输出,即使缓冲有缺陷(在如此广泛使用的库代码中似乎不太可能)@Clifford在给出的代码中,除了库中的错误之外,我看不出任何行为的原因。我同意,但这充其量只是猜测或建议,而不是答案。一条评论可能更合适。问题可能是PL2303或其Windows驱动程序,而不是您的代码或Arduino库。较旧的多产设备“以我的经验来看,我遇到了一些问题,假造的多产设备并不少见,甚至更糟。”Clifford说,但这些问题确实存在different@PeterJ:我不知道你如何假设知道我观察到了什么问题。我在流式传输数据时看到了这些设备丢失和损坏的字符。这并不是说不可能这是同一个问题,但由于数据缺乏变化,这一点更加明显。你不是唯一一个在pl…芯片方面有问题的人。我不认为你的问题不同。