INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zahl aus txt-Datei als globale Variable einlesen
15.02.2019, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2019 13:02 von Lance101.)
Beitrag #1
Zahl aus txt-Datei als globale Variable einlesen
Hallo zusammen,

ich nutze für meinen Uno ein SD Shield und möchte Daten auf der Karte speichern.
Dafür muss ich vorab von der SD-Karte, aus einer .txt Datei eine "Zahl" einlesen und diese für weitere Operationen als Variable im Code hinterlegen. (Die .txt Datei ist i.d.r. komplett leer, es steht nur eine Zahl in der Größenordnung 10-999 darin; nur INT).

Was ich bisher soweit durch andere Beiträge erfahren habe ist, dass die Zahl als Zeichen eingelesen wird und ich die Zeichen daher in ein charArray einlesen muss und anschließend in ein int wandeln muss.

Habe auch schon diverse SD library Beispiele angeschaut aber komme aktuell nicht weiter..(bin auch noch blutiger AnfängerConfused)

Der Serialmonitor gibt mir nur Nullen aus
Danke für eure Hilfe!!!

Hier der Code:

Code:
int gesuchteVariable; //die Zahl in txt Datei

char strValue[4]; // Muss groß genug sein, um alle Ziffern und die den
// String abschließende 0 aufzunehmen
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
int index = 0;
int chipSelect=10;
File myFile;
void setup()
{
Serial.begin(9600);

myFile = SD.open("test.txt", FILE_READ);
char ch = myFile.read();
if(index < 4 && isDigit(ch) ){
strValue[index++] = ch; // ASCII-Zeichen an String anha¨ngen;
Serial.println(ch);
}
else
{

strValue[index] = 0; // String mit einer 0 abschließen
gesuchteVariable = atoi(strValue); // String mit atoi in einen int-Wert umwandeln

index = 0;
}


}

void loop()
{
Serial.println(gesuchteVariable);
delay(2000);

//Hier wird "gesuchteVariable" noch für weitere Rechnungen gebraucht.
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 13:00
Beitrag #2
RE: Zahl aus txt-Datei als globale Variable einlesen
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Schau Dir mal das hier an oder suche nach SdFat (kann mehr) und benutze die dort enthaltenen Beispiele.
Die Beispiele sollten immer von der benutzten Lib sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 14:24
Beitrag #3
RE: Zahl aus txt-Datei als globale Variable einlesen
@Lance,
du kannst die Lösung dazu aus meinem Megalogger Sketch von vor 5 Jahren rausziehen, da habe ich genau dein Anliegen auch schon gelöst gehabt nur eben mit 5 Ziffern anstatt 3. Btw. ich habe bei 10000 angefangen zu zählen und einen Wertebereich bis 99999 vorgesehen gehabt weil dann die Zahl immer 5 Zeichen lang ist.
lgbk


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollt dann liest euch bitte diese Anleitung durch.

Ich spreche fließend Schwäbisch, Deutsch das Notwendigste und für die Begriffsstutzigen erprobtes Tacheles mit direkten Hinweisen ohne Schnörkel...

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 16:32
Beitrag #4
RE: Zahl aus txt-Datei als globale Variable einlesen
@Tommy, danke für den Hinweis mit dem Code. Die SdFat habe ich mir auch angeschaut, allerdings geben die Bsp dort den Inhalt einer csv/txt datei lediglich über den seriellen Monitor aus (als Zeichen),

@Bitklopfer: Danke für den Verweis zu deinem Programm. Ich habe allerdings den Abschnitt noch nicht ganz verstanden.

Habe den Code aber angepasst:
Code:
#include <Wire.h>
#include <SPI.h>
#include <SD.h>

int gesuchteVariable; //die Zahl in txt Datei
int i = 0;
int chipSelect=10;
File myFile;
char numbuffer[10];


void setup()
{
Serial.begin(9600);

myFile = SD.open("test.txt", FILE_READ);

if (myFile){
myFile.seek(0);
              for(i=0; i <= 4; i++ ) numbuffer[i] = myFile.read();  // nur die ersten 5 Ziffern einlesen
                   Serial.println(numbuffer);
              //dataFile.flush();
              myFile.close();
                }  
     gesuchteVariable =  atoi(numbuffer);  // Dateinummer in Integer wandeln
     Serial.println(numbuffer);
     Serial.println(gesuchteVariable);


}

void loop()
{
//Serial.println(gesuchteVariable);
delay(2000);
Serial.println(numbuffer);
Serial.println(gesuchteVariable);
//Hier wird "gesuchteVariable" noch für weitere Rechnungen gebraucht.
}

Der serielle Monitor gibt mir auch hier nur Nullen aus. Huh
Was habe ich übersehen?Dodgy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 16:44
Beitrag #5
RE: Zahl aus txt-Datei als globale Variable einlesen
Wenn Du numbuffer ausgeben willst musst Du immer numbuffer[i+1]='\0' setzen, damit die Zeichenkette ordentlich abgeschlossen ist. Infos hier.

Auch atoi braucht diesen Abschluss.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 17:31
Beitrag #6
RE: Zahl aus txt-Datei als globale Variable einlesen
(15.02.2019 16:44)Tommy56 schrieb:  Wenn Du numbuffer ausgeben willst musst Du immer numbuffer[i+1]='\0' setzen, damit die Zeichenkette ordentlich abgeschlossen ist. Infos hier.

Auch atoi braucht diesen Abschluss.

Gruß Tommy

Der Link ist echt gut!
Auch wenn ich nun numbuffer mit einer '\0' abschließe, kommt auf dem seriellen Monitor in einer Zeile nichts (" " ). Also eine leere Zeile.

Ausgabe SeriellerMonitor:
Zeile 1:
Zeile 2: 0
Zeile 3:
Zeile 4: 0
...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 17:59
Beitrag #7
RE: Zahl aus txt-Datei als globale Variable einlesen
Wenn Du Deinen Sketch ordentlich formatieren würdest, hätten es alle leichter, auch Du. <Strg>+T in der IDE hilft Dir dabei.

Probiere mal folgenden Code und sage uns, was er ausgibt:
Code:
void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  myFile = SD.open("test.txt", FILE_READ);

  if (myFile){
    byte b;
    for(i=0; i <= 4; i++ ) {
      b = myFile.read();
      Serial.println(b,HEX);      
      numbuffer[i] = b;  // nur die ersten 5 Ziffern einlesen
      numbuffer[i+1] = '\0';
      Serial.println(numbuffer);
    }  
    //dataFile.flush();
    myFile.close();
  }  
  gesuchteVariable =  atoi(numbuffer);  // Dateinummer in Integer wandeln
  Serial.println(numbuffer);
  Serial.println(gesuchteVariable);
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2019, 18:30
Beitrag #8
RE: Zahl aus txt-Datei als globale Variable einlesen
Ty,

dein Code gibt mir über den monitor dasselbe aus. Die zweite Zeile ist auch "leer".

SeriellerMonitor:
1.Zeile: Start
2.Zeile:
3.Zeile: 0


Gruß Lance
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  * vor Variable / Code-Frage N1d45 6 785 13.04.2021 19:49
Letzter Beitrag: N1d45
  Datei von PC auf SD-Karte speichern Karl Stanger 8 1.026 12.04.2021 18:03
Letzter Beitrag: Tommy56
  Variable in for-Schleife volllaufen lassen. gutschy 7 717 09.04.2021 17:54
Letzter Beitrag: Tommy56
  Sensor-Adressdaten mittels json von Webserver einlesen und hinterlegen MLuhmann 7 1.183 22.02.2021 18:56
Letzter Beitrag: Tommy56
  64Bit Variable? mega-hz 18 1.548 03.02.2021 16:17
Letzter Beitrag: Tommy56
  Daten in Datei löschen Karl Stanger 2 677 13.01.2021 19:54
Letzter Beitrag: Karl Stanger
  zweiten Wert über Serial einlesen vlakvark 7 954 14.12.2020 21:06
Letzter Beitrag: Tommy56
  RC-Signal mit Attiny85 einlesen chcs 4 797 08.12.2020 08:51
Letzter Beitrag: hotsystems
  Variable über serielle Eingabe befüllen ? Foto-Ralf 23 2.707 21.11.2020 11:23
Letzter Beitrag: Tommy56
  Erläuterung zu "digitalWrite(PIN, Variable ? LOW : HIGH); " Christian_Moba-Arduino 14 1.857 09.10.2020 08:53
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste