Hallo zusammen!
Ich bin neu hier. Falls ich meine Frage hier in der falschen Kategorie stelle, dann bitte in die richtige verschieben.
Mein Problem:
Ich möchte Messwerte (Windstärke), die in einem integer-Array stehen auf einer SD-Karte zwischenspeichern und am nächsten Tag (nach Stromabschaltung) wieder in das Array einlesen.
Benutzte Hardware:
Arduino Uno ATmega 328 - compatibles Board von AZ-Delivery
ARD SDH 2,8 TD TFT-Display mit SD-Kartensteckplatz von Reichelt
Ich benutze zum rumprobieren folgende Sketche:
Zum Schreiben:`
/*
TestVersion von mir
Nur Datei auf Karte Schreiben
Die Daten dafür stammen aus einem integer-Array
*/
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10; //Hier muss unbedingt 10 stehen
File myFile;
int Zahl = 20; //Vorgabe für Zähler
int Ary[21];
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
//Array füllen
for (int count = 0; count <=21; count++)
{
Ary[count]= count+11;
}
Serial.print("Initialisierung SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("Initialisierung Fehler");
while (1);
}
Serial.println("Initialisierung erfolgreich");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("testtest.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Schreibe in testtest.txt...");
while (Zahl != 0)
{
Serial.println(Ary[Zahl]);
myFile.println(Ary[Zahl]);
Zahl--;
}
// close the file:
myFile.close();
Serial.println("Schreiben fertig");
} else {
// if the file didn't open, print an error:
Serial.println("Fehler beim Schließen");
}
}
void loop() {
// nothing happens after setup
}
und zum Lesen:
/* TestVersion von mir
SD card Lesen und in integer Variablen speichern
dazu dient ein Array
*/
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10; //Hier muss unbedingt 10 stehen
File myFile;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial)
{
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initialisierung SD card...");
if (!SD.begin(chipSelect))
{
Serial.println("Initialisierung Fehler");
while (1);
}
Serial.println("Initialisierung erfolgreich");
// re-open the file for reading:
myFile = SD.open("testtest.txt");
if (myFile)
{
Serial.println("Inhalt der Datei:");
Serial.print("Größe der Datei: ");
Serial.println(myFile.available());
// read from the file until there's nothing else in it:
while (myFile.available())
{
Serial.write(myFile.read()); //Erstmal die Werte nur anzeigen
}
// close the file:
myFile.close();
}
else
{
// if the file didn't open, print an error:
Serial.println("Fehler beim öffnen der Datei");
}
int Vari[21]; //Das Array, das gefüllt werden soll
// Neuer Durchlauf mit Füllen eines Arrys
myFile = SD.open("testtest.txt");
if (myFile)
{
Serial.println("Durchlauf Nummer 2");
Serial.print("Größe der Datei: ");
Serial.println(myFile.available());
for(int count=0; count<=21; count++)
{
Vari[count]= (myFile.read()); //Das Array wird aus der Datei gefüllt
}
// close the file:
myFile.close();
}
else
{
// if the file didn't open, print an error:
Serial.println("Fehler beim öffnen der Datei");
}
Serial.write("Nun die Ausgabe:");
for(int count=0; count<=21; count++)
{
Serial.println(Vari[count]); //Der Inhalt des Arrays wird angezeigt
}
}
void loop()
{
// nothing happens after setup
}
Das sind beides Abwandlungen des "ReadWrite" Beispiels aus der Bibliothek.
Im Array landen die gespeicherten Werte im ASCII-Code mit LF und CR als Trennung. Das nützt mir so natürlich nichts.
Ich hatte überlegt, ob das mit dem Dateityp ".txt" zu tun hat, aber auch mit anderen Dateitypen hat es nicht geklappt. Ich hab im Netz rumgesucht, weil ich bestimmt nicht der Erste bin, der dies Problem hat. So richtig fündig geworden bin ich aber nicht. Mag daran liegen, dass mein Englisch nicht so gut ist.
Ein Beispiel "StringToInt" hab ich gefunden. Leider habe ich es nicht zum laufen bekommen.
Für Tipps wäre ich dankbar.