在我的下面的代码中,我发送 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;
}
}
读取前需要检查是否有串口数据。如果没有数据,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);
}
}
}