如何使用 Arduino 管理通信过程

问题描述 投票:0回答:1

在我的下面的代码中,我发送 8 次 1 字节数据。发送后,我正在通过arduino检查数据。哇哦,我发送第一个字节,它会捕获它是否为真。但对其他人来说不一样。它无法读取其他值

#define RXBUFFER_SIZE 10
#define TXBUFFER_SIZE 10

byte RxBuffer[RXBUFFER_SIZE];
byte RxBuffer2[RXBUFFER_SIZE];
byte TxBuffer[TXBUFFER_SIZE];

bool isFirstByteReceived = false;
bool RX_Data_True_Flag = false;
unsigned int u16ChkSUM;
unsigned int rx_counter=0;

void setup() {
  Serial.begin(9600);
}

void loop() {
      byte receivedByte = Serial.read();
    if (!isFirstByteReceived) {
         RxBuffer[0] = receivedByte;
         if(RxBuffer[0] == 0x35)
         {
          isFirstByteReceived = 1;
          Serial.print("first data true");
          }
        }
    else{
        Serial.print("other values");
        byte receivedByte = Serial.read();
        RxBuffer[rx_counter] = receivedByte; // Assuming the first byte is already received
        rx_counter++;
        Serial.print("RxBuffer["); Serial.print(rx_counter); Serial.print("]"); Serial.println(RxBuffer[rx_counter]);
        if(rx_counter == 8){
            isFirstByteReceived = 0;
            rx_counter = 1;
            Check_RX_Data_True();
         }
      }
}

void Check_RX_Data_True() {

    if (RxBuffer[7] == 0x35 && RxBuffer[8] == 0x35) {
      Serial.println("all values done");
      RX_Data_True_Flag = true;
    } else {
       Serial.println("failed values");
      RX_Data_True_Flag = false;
    }

}
arduino serial-port serial-communication
1个回答
0
投票

读取前需要检查是否有串口数据。如果没有数据,Serial.read() 函数返回 -1。循环函数比串行数据流运行得更快,因此大多数时候它返回-1。

当您调用 Serial.read() 函数时,它会返回接收到的字节一次,第二次调用时,仅当有其他数据时它才会返回。对于一字节数据调用一次。

void loop() {
    if(Serial.available()>0){
          byte receivedByte = Serial.read();
          if(rx_counter<RXBUFFER_SIZE){
             RxBuffer[rx_counter] = receivedByte;
             rx_counter++;
             Serial.println(rx_counter);
          }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.