Go Down

Topic: Daten(IP) von SD lesen (Read 1 time) previous topic - next topic

Lan-Police

Hallo,

ich nutzte die SdFat.h und möchte gerne aus der "test.txt" eine IP-Adresse auslesen um diesen an das Ethernet Shield zu übergeben.
Habe es mit folgendem Code getestet aber das schein nicht der Richtige Weg zu sein !?

Code: [Select]
void testsd()
{
 if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
 if (!myFile.open("test.txt", O_READ))
   {
   sd.errorHalt("opening test.txt for read failed");
   }
 int data;
 while ((data = myFile.read()) > 0) Serial.print(data);
 myFile.close();
 
}


So wie ich das sehe brauch ich ein Byte Array für das Ethernet Shield ?

Inhalt der "test.txt":
Code: [Select]
192.168.178.1

Gruß
Jens

michael_x

Quote
Habe es mit folgendem Code getestet aber das schein nicht der Richtige Weg zu sein !?

Ich weiss nicht, warum das nicht der richtige Weg sein soll, und rate mal du siehst im SerialMonitor
49575046....
Wenn das richtig geraten ist, lob mich bitte, und lass dir sagen, dass der Weg richtig ist soweit, aber du noch nicht am Ziel bist.
In deiner Datei steht ein Text, den liest du Buchstabe für Buchstabe, und musst dann die Punkte erkennen und aus dem was dazwischen ist, Zahlen machen.
Dafür gibt es mehrere Methoden.
- Entweder erst alles in ein char array einlesen, die Punkte in EndeKennungen (0) wandeln und die 4 Teile mit atoi in Zahlen wandeln
- Oder gleich beim zeichenweisen Einlesen:
Wenn du sicher bist, dass der Buchstabe eine Ziffer zwischen '0' und '9' ist, subtrahiere einfach '0' ( oder eine 48, das ist das gleiche) und du erhältst eine Zahl zwischen 0 und 9.
Wenn das nächste Zeichen nicht '0' ... '9' ist (also ein Punkt oder ein Zeilenende oder ein Leerzeichen oder ... ) ,  ist ist die Zahl fertig.
Sonst *10 und den nächsten Buchstaben genauso behandeln und dazuaddieren. 

Lan-Police

Hallo Michael,

also Serial sehen ich die komplette IP Adresse ;)

Danke für deine Ideen ... leider kann ich als "Newbie" damit nicht viel anfangen. Bin da aus Zeitmangel auf der Suche nach einem "Code Schnipsel" den ich mir Anpassen kann vllt. hat jemand was für mich ?

Gruß
Jens

jurs


Schnipsel" den ich mir Anpassen kann vllt. hat jemand was für mich ?


Du möchtest die IP-Adresse als Klartext in der Form "Dezimalzahlen als Text mit Punkten getrennt" in eine Datei schreiben und ein Programm soll Dir daraus die einzelnen 4 Bytes machen?

Vor kurzem habe ich mir eine absolut geniale Funktion gemacht, um positive Integer-Zahlen aus einem Char-Array auszulesen, die Funktion habe ich hier im Forum im Zusammenhang mit Kommandoauswertung über die serielle Schnittstelle auch schon gepostet gehabt.

Code: [Select]

int getIntFromString (char *stringWithInt, byte num)
// input: pointer to a char array
// returns an integer number from the string (positive numbers only!)
// num=1, returns 1st number from the string
// num=2, returns 2nd number from the string, and so on
{
  char *tail;
  while (num>0)
  {
    num--;
    // skip non-digits
    while ((!isdigit (*stringWithInt))&&(*stringWithInt!=0)) stringWithInt++;
    tail=stringWithInt;
    // find digits
    while ((isdigit(*tail))&&(*tail!=0)) tail++;
    if (num>0) stringWithInt=tail; // new search string is the string after that number
  } 
  return(strtol(stringWithInt, &tail, 0));



D.h. Du liest Dir Deine Klartext-IP am besten in ein Char-Array ein, sagen wir mal es heißt "charBuffer",
und dann holst Du die vier Werte entsprechend raus:
byte1=getIntFromString (charBuffer, 1);
byte2=getIntFromString (charBuffer, 2);
byte3=getIntFromString (charBuffer, 3);
byte4=getIntFromString (charBuffer, 4);

So ungefähr?

Lan-Police

Hallo jurs,

danke für deine Mühe, leider hab ich keine Idee wie ich den Inhalt der Datei in ein Char-Array bekomme!?

Gruß
Jens

Go Up