私はArduinoが初めてで、次のことを行う方法が見つかりません。複数の値を埋める typedef 構造体があります。
void loop() {
accel.process();
AccelerationReading accelData;
accelData.xAxis = accel.xAxis;
accelData.yAxis = accel.yAxis;
accelData.zAxis = accel.zAxis;
//Irrelevant code after this
}
構造体がいっぱいにmemcpy
なったら、バッファに入れます。
uint8_t buffer[6];
memcpy((void*)buffer, (void*)&accelData, 6);
これで問題なく動作しますが、2 つのアナログ ポートから値を読み取る必要もあり、それら 2 つの値も memcpy に追加する必要があります。2 つの変数を満たすコード:
//New variables
int shortflexposition;
int longflexposition;
//Filling up the variables.
shortflexposition = analogRead(shortflexpin);
longflexposition = analogRead(longflexpin);
accelData には 6 バイトの raw 値が含まれており、これらのバイトの後に shortflexposition と longflexposition を追加したいと考えています。変数 shortflexposition と longflexposition の値は常に 0 から 1023 の間です。これらの他の変数を memcpy に正確に追加するにはどうすればよいですか? たとえば、次のことを試しました。
uint8_t buffer[8];
memcpy((void*)buffer, (void*)&accelData + shortflexposition, 8);
しかし、これは、次のバイトなどに値を追加するのではなく、相互に値を追加するようです。では、memcpy を使用して次のバイト位置に新しい変数を追加するにはどうすればよいでしょうか?
ありがとう!イェンテ
更新: これは Lundin からのコードの試みです..
typedef union
{
struct s
{
AccelerationReading accelData;
uint16_t shortflexposition;
uint16_t longflexposition;
};
uint8_t raw_data [sizeof(struct s)];
} my_data;
void setup() {
// Bean Serial is at a fixed baud rate. Changing the value in Serial.begin() has no effect.
Serial.begin();
accel.init();
}
void loop() {
accel.process();
AccelerationReading accelData;
my_data data;
data.accelData.xAxis = accel.xAxis;
data.accelData.yAxis = accel.yAxis;
data.accelData.zAxis = accel.zAxis;
//Get flex readings
int shortflexposition;
int longflexposition;
//Read the position of the flex sensor (0 to 1023?)
data.shortflexposition = analogRead(shortflexpin);
data.longflexposition = analogRead(longflexpin);
my_data some_other_data = data;
uint8_t buffer[6];
memcpy((void*)buffer, (void*)&accelData, 6);
Bean.setScratchData(1,buffer,6);
Bean.sleep(1000);
}
しかし、次のエラーが発生します。
GetReader.ino: In function 'void loop()':
GetReader.ino:54:8: error: 'union loop()::my_data' has no member named 'accelData'
GetReader.ino:55:8: error: 'union loop()::my_data' has no member named 'accelData'
GetReader.ino:56:8: error: 'union loop()::my_data' has no member named 'accelData'
GetReader.ino:63:8: error: 'union loop()::my_data' has no member named 'shortflexposition'
GetReader.ino:64:8: error: 'union loop()::my_data' has no member named 'longflexposition'