Arduino - 为什么串行数据写入顺序错误?

时间:2017-08-07 22:11:19

标签: 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);  
    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();
    }
  } 
}

我正在使用PL2303 USB串行适配器,Bluno M3 arduino,CoolTerm串行监视器。

如果你查看这张图片:

image

你可以看到,在这段代码发送的数据中,0xC7字节与0xDD字节混合在一起(所谓的像素字节)

为什么会这样?

2 个答案:

答案 0 :(得分:0)

  1. 您没有分配像素变量并始终发送相同的值;
  2. 仅在传输结束时刷新串行。它应该有所帮助。否则就是错误
  3. 做另一个测试:每次都不要发送相同的值。它将提供更多诊断数据

答案 1 :(得分:0)

感谢大家指出问题可能是PL2303模块。通过进一步测试,我确认PL2303 USB适配器无法正常工作。

当我使用相同的串行监视器但在用于编程Bluno arduino的相同COM端口时,代码运行良好。这种奇怪的行为令人非常沮丧,但我感谢所有指出我正确方向的人。