我是 C++ 的初学者,正在尝试为我的 Arduino 创建一个程序。下面的代码编译得很好,但结果与我预期的不同。
我希望在我的 PC 上收到的是:0x04、0x61、0x62、0x63。
我在 PC 上收到的是:0xff 0x00 0xb1 0x00。
我试图以一种只解决我遇到的问题的方式最小化代码。
byte *assembleFrame() {
byte frame[] = { 4 , 'a' , 'b' , 'c' , 'd' };
return frame;
}
void setup() {
Serial.begin( 115200 );
};
void loop() {
byte *frame = assembleFrame();
Serial.write( frame , 4 );
// should send 0x04 0x61 0x62 0x63, leaving out 0x64 being 5th element.
while ( 1 ) {
}
}
我认为它与指针有关,但无法弄清楚。
供参考:
Serial.write( buf , len ) arguments:
buf: an array to send as a series of bytes
len: the length of the buffer
编辑: 到目前为止的解决方案:
int assembleFrame( byte *frame ) {
int octetCounter = 0;
frame[ octetCounter++ ] = 'A'; // preamble
frame[ octetCounter++ ] = 'B'; // preamble
frame[ octetCounter++ ] = 0; // frame length set at end of function
frame[ octetCounter++ ] = h;
frame[ octetCounter++ ] = m;
frame[ octetCounter++ ] = s;
frame[ 2 ] = octetCounter; // frame length
return frame[ 2 ];
}
void loop() {
int bytes_in_frame = assembleFrame( frame );
Serial.write( frame, bytes_in_frame ); // assuming ptr + bytes to send
delay( 1000 );
}
它给出了预期的结果。