Arduino - Почему серийные данные записаны в неправильном порядке?

В основном, у меня есть этот код на 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();
    }
  } 
}

Я использую USB-адаптер последовательного интерфейса PL2303, Arduino Bluno M3, последовательный монитор CoolTerm.

И если вы проверите это изображение:

образ

Вы можете видеть, что в данных, которые отправляет этот код, байт 0xC7 смешивается с байтами 0xDD (так называемые пиксельные байты)

Почему это происходит?

2 ответа

Спасибо всем, кто указал, что проблема может быть в модуле PL2303. После дальнейшего тестирования я подтвердил, что USB-адаптер PL2303 работает неправильно.

Код работает хорошо, когда я использую тот же последовательный монитор, но на том же COM-порту, который используется для программирования, что и Bluno Arduino. Это странное поведение было очень неприятно, но я ценю всех, кто указал мне правильное направление.

  1. Вы не присваиваете свою пиксельную переменную и всегда посылаете одно и то же значение;
  2. Промывайте серийный номер только в конце передачи. Это должно помочь. в противном случае это ошибка

Сделайте еще один тест: вместо того, чтобы отправлять одно и то же значение, увеличивайте его с каждым разом. Это даст больше диагностических данных

Другие вопросы по тегам