ESP32 сохранение данных на SD-карту в формате .csv не форматируется правильно
я хочу сохранить вектор в CSV-файл на SD-карте.
Я смотрел этот учебник о том, как это сделать, и он прекрасно описывает его, хотя он немного устарел.
Моя проблема в том, что все сохраняется в первой ячейке CSV-файла, поэтому он постоянно перезаписывается . Он должен сохранить только первый вектор в первую ячейку, затем второй вектор во вторую ячейку и так далее. Я просто помещаю все три вектора с запятыми в первый вектор следующим образом:
8, 9, 10
Кроме того, заголовок, который должен появиться вверху, также исчез.
Я был бы очень признателен за помощь. Спасибо!
Вот моя настройка и цикл:
#include <iostream>
#include <string>
#include <vector>
#include "SD.h"
#include "SPI.h"
#include "EKG_data_transmision.h"
#define CS_Pin 5 // Chip Select Pin
EKG_data_transmision EKG_data_transmision;
std::vector<unsigned short> vector_1 = {1,2,3,4,5,6,7,8,9,10};
std::vector<unsigned short> vector_2 = {2,3,4,5,6,7,8,9,10,11};
std::vector<unsigned short> vector_3 = {3,4,5,6,7,8,9,10,11,12};
unsigned int for_x = 0;
void setup() {
// open serial
Serial.begin(9600);
Serial.print("Init SD Card...");
pinMode(CS_Pin, OUTPUT);
if(!SD.begin(CS_Pin))
{
Serial.println("Card failed or not present");
return;
}
EKG_data_transmision.vectorData = SD.open("/data.csv", FILE_WRITE); //erstelle data.csv datei
if(EKG_data_transmision.vectorData)
{
EKG_data_transmision.vectorData.println(", , , ,");
String header = "ID, Value, Time, Whatever";
EKG_data_transmision.vectorData.println(header);
EKG_data_transmision.vectorData.close();
Serial.println(header);
Serial.println("card init sucess");
}
else
{
Serial.println("Couldnt open vector data file");
}
}
void loop() {
// put your main code here, to run repeatedly:
while(for_x <= 8){
for_x++;
EKG_data_transmision.write_vector_to_SD(vector_1, vector_2, vector_3);
delay(1000);
}
delay(10000);
}
Вот моя функция, которая должна сохранить все на SD-карту:
bool EKG_data_transmision::write_vector_to_SD(std::vector<unsigned short> vector_ADC_1, std::vector<unsigned short> vector_ADC_2, std::vector<unsigned short> vector_ADC_3) // Übertrage
{
dataString = String(vector_loc) + "," + String(vector_ADC_1[vector_loc]) + "," + String(vector_ADC_2[vector_loc]) + "," + String(vector_ADC_3[vector_loc]); // + "\r\n"
vectorData = SD.open("/data.csv", FILE_WRITE);
if(vectorData){
//sd karte immer noch da und schau ob data.csv exisitiert
vectorData.println(dataString);
Serial.println("This is vector:");
Serial.println(vector_loc);
Serial.println("Im actually writing this:");
Serial.println(dataString);
vectorData.close(); // close the file
}
else{
Serial.println("Error writing to file !");
}
vector_loc++;
return 0;
}
@Xenoshell, 👍0
Обсуждение1 ответ
Лучший ответ:
В библиотеке Arduino SD константа FILE_WRITE инструктирует функцию открыть файл для добавления, но в библиотеке esp32 SD она открывает файл для перезаписи. Используйте FILE_APPEND, чтобы открыть файл для добавления.
File file = SD.open(path, FILE_APPEND);
- Как увеличить скорость записи на SD-карту в Ардуино
- Камера esp32 и датчик PIR
- Видеокамера ESP32 и пробуждение от глубокого сна
- Как удалить содержимое SD-карты в ардуино?
- Подключение к WiFi на ESP32 с использованием учетных данных с SD-карты
- Как считывать аналоговое значение на ESP32-CAM с включенным считывателем SD-карт?
- Использовать карту Micro SD для регистрации данных — плохая идея? Надежно?
- Почему я не могу инициализировать Micro-SD?
Спасибо за быстрый ответ. Я просто изменил каждую ЗАПИСЬ на ДОБАВЛЕНИЕ. Теперь значения сохраняются в разных ячейках, но только в строке A. Я думал, что с помощью", " он переключается в разные строки. У вас есть ответ на этот вопрос?, @Xenoshell
на моем языке Excel использует
;
для csv, потому что у нас есть,
в качестве десятичного разделителя, @JurajБольшое спасибо за вашу помощь!! Я только что попробовал, и с помощью
`;
` он работает отлично., @XenoshellЯ перешел от первого комментария к ответу, @Juraj