阵列数据读取失败

Array Data Reading Failed

我正在使用“USB Host Shield2.0”和 Arduino UNO 从“扭矩扳手”读取数据。我从我的“扭矩扳手”接收到正确的数据 数据在一个数组中接收。 但是当我在 Void loop() 内的“for”循环后开始读取数据时,我收到了不正确的数据。我附上了输出图片正确和错误的数据。

基本上我是从扭矩扳手读取数据并使用 Nrf24l01 发送到接收器。我收到的数据不正确。

我的问题是:- 为什么我在“for”循环之外读取不正确的数据。

  1. 更正“for”循环内的数据:- enter image description here
  2. “for”循环外的数据不正确:- enter image description here
#include <SPI.h> // for SPI communication
#include <nRF24L01.h>
#include <RF24.h>

#include <cdcacm.h>
#include <usbhub.h>

//#include "pgmstrings.h"

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>



RF24 radio(7, 8); // CE, CSN
const byte address[6] = {'R','x','A','A','A','B'}; // the address the the module

class ACMAsyncOper : public CDCAsyncOper
{
public:
    uint8_t OnInit(ACM *pacm);
};

uint8_t ACMAsyncOper::OnInit(ACM *pacm)
{
    uint8_t rcode;
    // Set DTR = 1 RTS=1
    rcode = pacm->SetControlLineState(3);

    if (rcode)
    {
        ErrorMessage<uint8_t>(PSTR("SetControlLineState"), rcode);
        return rcode;
    }

    LINE_CODING  lc;
    lc.dwDTERate  = 9600;
    lc.bCharFormat  = 0;
    lc.bParityType  = 0;
    lc.bDataBits  = 8;

    rcode = pacm->SetLineCoding(&lc);

    if (rcode)
        ErrorMessage<uint8_t>(PSTR("SetLineCoding"), rcode);

    return rcode;
}

USB     Usb;
//USBHub     Hub(&Usb);
ACMAsyncOper  AsyncOper;
ACM           Acm(&Usb, &AsyncOper);




void setup() {

  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MAX);
  radio.stopListening(); 

  #if !defined(__MIPSEL__)
  while (!Serial); 
#endif
  Serial.println("Start");

  if (Usb.Init() == -1)
      Serial.println("USB Not Connected");

  delay( 200 ); 
 

}

void loop() {
  
  

   Usb.Task();
 
    if( Acm.isReady()) {
       uint8_t rcode;

       /* reading the keyboard */
       if(Serial.available()) {
         uint8_t data= Serial.read();
         /* sending to the phone */
         rcode = Acm.SndData(1, &data);
         if (rcode)
            ErrorMessage<uint8_t>(PSTR("SndData"), rcode);
       }

       delay(10);

        uint8_t  buf[64];
        uint16_t rcvd = 64;
        char text[64];
        
        rcode = Acm.RcvData(&rcvd, buf);
         if (rcode && rcode != hrNAK)
            ErrorMessage<uint8_t>(PSTR("Ret"), rcode);

            if ( rcvd ) { 
           
             for(uint16_t i=0; i < rcvd; i++ ) 
              { 
               // Serial.print((char)buf[i]);  // correct Data read from torque wrench
                text[i] = (char)buf[i];
              }

              
              Serial.println(text);  // reading wrong data here
              
              //radio.write(&text, sizeof(text));   
              //Serial.println(text);               
            }
        delay(10);
    }
  
}

字符数组必须以空字符结尾才能算作 C 字符串。 在 for 循环之后,添加 text[rcvd] = '[=10=]'; 此外,您的 rcvd 固定为 64。它需要比数组大小小 1 才能适合空终止符。