Salve a tutti, non ho grandissima esperienza in C++ in quanto è solo da un anno che lo sto utilizzando. Ho imparato a salvare i dati dei sensori che registravo tramite seriale o tramite sd. Ora ho integrato il wifi e vorrei sfruttarlo per farmi inviare i dati direttamente al computer. Ho bisogno di chiarimenti e/o dritte in quanto sono però confuso.
Sostanzialmente ho creato un applicazione che da remoto mi gestisce la board con i vari sensori, i cui dati voglio appunto salvare. Immaginando di accendere all'istante A i sensori, iniziare a registrare e spegnere al momento B i sensori, mi chiedo quanto debba essere grande il buffer. Ho notato che esiste anche il circularbuffer, forse meno computazionale, ma non capisco comunque la size del buffer nè quando inviare i dati e quando svuotare il buffer.
Gli output sono 10 in riga, separati da una virgola, e ognuno ha 1/2/3 cifre.
Il mio hardware:
https://content.arduino.cc/assets/Datasheet-Portenta-H7.pdf https://cdn-learn.adafruit.com/downloads/pdf/adafruit-bno055-absolute-orientation-sensor.pdf
Lo sketch per testare il buffer è questo, dove voglio salvare phi e dove con più di 100 non sembrava funzionare. il problema aggiuntivo è che qui il valore di phi non cambia nonostante il movimento dell'imu bno055
/**** BNO055 ****/
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
Adafruit_BNO055 bno = Adafruit_BNO055(55); //(55); //(-1, 0x28);
float q0, q1, q2, q3, gx, gy, gz, norm, phi, v0, v1, v2, linacc;
float radtodeg = 57296 / 1000;
int anArray[100];
byte arrayIndex = 0;
int i=0;
void setup() {
Serial.begin(57600);
Wire.begin();
/**** BNO055 ****/
if (!bno.begin())
{
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while (1);
}
bno.setExtCrystalUse(true);
}
void loop() {
imu::Quaternion quat = bno.getQuat();
imu::Vector<3> lin = bno.getVector (Adafruit_BNO055::VECTOR_LINEARACCEL );
q0 = quat.w(); q1 = quat.x(); q2 = quat.y(); q3 = quat.z();
gx = q1 * q3 - q0 * q2; gy = q0 * q1 + q2 * q3; gz = q0 * q0 + q3 * q3 - 0.5f;
norm = sqrt(gx * gx + gy * gy + gz * gz); norm = 1.0 / norm;
gx *= norm; gy *= norm; gz *= norm;
phi = acos(gx); phi = phi * radtodeg;
v0 = lin.x(); v1 = lin.y(); v2 = lin.z();
while (arrayIndex<99){
anArray[arrayIndex] = phi; //put a value in entry 0
arrayIndex++; //increment the array index
i++;
}
Serial.println("array filled");
delay(3000);
for(int j = 0; j < 99; j++)
{
Serial.println(anArray[j]);
}
Serial.println();
delay(1500);
}
Grazie a tutti per qualsiasi indicazione utile