Yeah i found a way to close it just every 30 secs, which should be fine.
But a new problem occurred. There data i want to printToSd in void printEvent is not written to the SD.
const int SAMPLE_RATE = 100; //100 Hz
const int SAMPLE_TIME = 60; //60 Sekunden
const int NUMBER_OF_SAMPLES = SAMPLE_RATE * SAMPLE_TIME;
char data_array1[NUMBER_OF_SAMPLES];
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#include <SPI.h>
#include <SD.h>
#include <SdFat.h>
#include "SdFat.h"
const int chipSelect = 6; // CS Pin für SD
// Check I2C device address and correct line below (by default address is 0x29 or 0x28)
// id, address
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28);
/* Set the delay between fresh samples */
uint16_t BNO055_SAMPLERATE_DELAY_MS = 0;
//SdFat_h sd;
File myFile;
int last_data_save = 0;
const char dataFile[] = "test1.txt";
void setup() {
Serial.begin(19200);
Serial.println("Orientation Sensor Test"); Serial.println("");
pinMode(LED_BUILTIN, OUTPUT);
// SD-Card Initialise
Serial.print("Initializing SD card...");
if (!SD.begin(28)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
/* Initialise the sensor */
if (!bno.begin())
{
/* There was a problem detecting the BNO055 ... check your connections */
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while (1);
}
delay(1000);
}
void loop(void)
{
//could add VECTOR_ACCELEROMETER, VECTOR_MAGNETOMETER,VECTOR_GRAVITY...
sensors_event_t orientationData , angVelocityData , linearAccelData, magnetometerData, accelerometerData, gravityData;
bno.getEvent(&orientationData, Adafruit_BNO055::VECTOR_EULER);
bno.getEvent(&angVelocityData, Adafruit_BNO055::VECTOR_GYROSCOPE);
bno.getEvent(&linearAccelData, Adafruit_BNO055::VECTOR_LINEARACCEL);
bno.getEvent(&magnetometerData, Adafruit_BNO055::VECTOR_MAGNETOMETER);
bno.getEvent(&accelerometerData, Adafruit_BNO055::VECTOR_ACCELEROMETER);
bno.getEvent(&gravityData, Adafruit_BNO055::VECTOR_GRAVITY);
printEvent(&angVelocityData, &accelerometerData, &linearAccelData);
uint8_t system, gyro, accel, mag = 0;
bno.getCalibration(&system, &gyro, &accel, &mag);
//Wenn die System-Kalibration auf 3 ist leuchtet eine LED
if (system == 3) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}
void printEvent(sensors_event_t* angVelocityData, sensors_event_t* accelerometerData, sensors_event_t* linearAccelData) {
double x = -1000000, y = -1000000 , z = -1000000; //dumb values, easy to spot problem
unsigned long timestamp = millis();
myFile.print(timestamp);
Serial.print(timestamp);
myFile.print(',');
Serial.print(',');
myFile.print(angVelocityData->gyro.x);
Serial.print(angVelocityData->gyro.x);
myFile.print(',');
Serial.print(',');
myFile.print(angVelocityData->gyro.y);
myFile.print(',');
Serial.print(angVelocityData->gyro.y);
Serial.print(',');
myFile.print(angVelocityData->gyro.z);
myFile.print(',');
Serial.print(angVelocityData->gyro.z);
Serial.print(',');
// linear Accelerometer (ohne g)
myFile.print(linearAccelData->acceleration.x);
Serial.print(linearAccelData->acceleration.x);
myFile.print(',');
Serial.print(',');
myFile.print(linearAccelData->acceleration.y);
myFile.print(',');
Serial.print(linearAccelData->acceleration.y);
Serial.print(',');
myFile.print(linearAccelData->acceleration.z);
myFile.print(',');
Serial.print(linearAccelData->acceleration.z);
myFile.print("\n");
Serial.print("\n");
// alle 30s Daten auf SD speichern
if (millis() - last_data_save >= 1000 * 30) {
last_data_save = millis();
writeStringToSD(data_array1, dataFile);
}
uint8_t system, gyro, accel, mag = 0;
bno.getCalibration(&system, &gyro, &accel, &mag);
}
// ------------------ initializeSD ----------------------------------
void initializeSD() {
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("Initialization failed!");
Serial.println("NO SD!");
Serial.println("Program stopped.");
while (1) {
}
return;
}
Serial.println("Initialization done.");
}
// ------------------ writeStringToSD ----------------------------------
//Ein belibiger String wird in ein belibiges Files geschrieben
boolean writeStringToSD(const char *data, const char *test1)
{
Serial.print("Writing to: ");
Serial.println(test1);
myFile = SD.open(test1, FILE_WRITE); //Öffnet file zum Lesen
if (myFile) { //Wenn File erfolgreich geöffnet wurde
myFile.println(data); //Schreibt Datenstring ans Ende des Files
}
else {
Serial.println("Error while opening the file!");
return false;
}
myFile.close(); //Schließt File (Daten werden gesichert)
return true;
}
I would like to insert the construct from printEvent to the data below. Is there a easy way to send to layout down there?