Pages: [1] 2   Go Down
Author Topic: Wie kann ich meinen Code vereinfachen?  (Read 1620 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

ich bestele jetzt 3 Wochen mit dem Arduino an einem kleinen Webserver.

Langsam kann ich mir auch vorstellen wie alles funktioniert. Jetzt möchte ich von der SD-Karte verschiedene Dateien übergeben.
Jetzt habe ich nur das Problem mit der Dateideklaration. Ich kann kein Dateinamen als Varible übergeben. Wie bekomme ich nun meinen einzelnen Fileaufrufe einfacher?

Aktuell sieht es so aus (funktiniert auch):

Quote
       
          if (Filenummer == 1) {
            client.println("HTTP/1.1 200 OK"); //send new page
            client.println("Content-Type: text/html");
            client.println();
            Serial.println("Laden startp.txt");
            File myFile = SD.open("startp.txt");
            if (myFile) {
              while (myFile.available()) {
                client.write(myFile.read());
              }
            myFile.close();}
          }
          else if (Filenummer == 2){
            client.println("HTTP/1.1 200 OK"); //send new page
            client.println("Content-Type: text/html");
            client.println();
            Serial.println("Laden zsperr.txt");
            File myFile = SD.open("zsperr.txt");
            if (myFile) {
              while (myFile.available()) {
                client.write(myFile.read());
              }
            myFile.close();}
          }
          else if (Filenummer == 3){
            client.println("HTTP/1.1 200 OK"); //send new page
            client.println("Content-Type: text/html");
            client.println();
            Serial.println("Laden 0101fr.txt");
            File myFile = SD.open("0101fr.txt");
            if (myFile) {
              while (myFile.available()) {
                client.write(myFile.read());
              }
            myFile.close();}
          }
          else {
            File myFile = SD.open("startp.txt");
            if (myFile) {
              while (myFile.available()) {
                client.write(myFile.read());
              }
            myFile.close();}
          }
            delay(1);
            //stopping client
            client.stop();
            readString="";
          }


Danke.
Sven
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie bekomme ich nun meinen einzelnen Fileaufrufe einfacher?

Weißt Du, was eine "selbstgeschriebene Funktion" ist?
Schon mal eine programmiert?
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ne nicht direkt.

Aber mein Problem ist das ich wenn ich meinen Dateinamen gegen eine Varible (sting) autauschen möchte die Anzeige bekomme das nur eine Char-Array passt. Die bekomme ich aber noch nicht mit passendem Inhalt befüllt auf aufgerufen.

Sven
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aber mein Problem ist das ich wenn ich meinen Dateinamen gegen eine Varible (sting) autauschen möchte die Anzeige bekomme das nur eine Char-Array passt.

Den Datentyp "String" als Objekt vergisst Du am besten ganz schnell. Für die Programmierung von Mikrocontrolllern völlig ungeeignet. Am besten nur char-Arrrays verwenden.

Die bekomme ich aber noch nicht mit passendem Inhalt befüllt auf aufgerufen.

???

An ein char-Array kannst Du mit der Funktion strcpy einen anderen String zuweisen. Und wenn Du einen char-Pointer als Variable einer Funktion deklarierst, kannst Du auch Konstanten als Parameter übergeben, und Funktionen aufrufen mit:
printMyFile("Datei.txt");

Wobei die Deklaration des Funktionsrumpfes dann lauten würde:

void printMyFile(char* fn)
{
 // hier der auszuführende Code der Funktion
}


Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich probiere es grade.

Wie kann ich denn auf diese Client aufrufe aus dem Ethentaufruf im loop zurückgreifen?

Quote
EthernetClient client = server.available();
  if (client) {.....

Die hat er ja in der neuen Funktion nicht mehr.
« Last Edit: January 01, 2013, 05:21:16 pm by SvenM » Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm.

Jetzt bekomme ich nur noch Müll in meinem seriellen Monitor.

Quote
Starting SD..Starting SD..

Kann es daher kommen das ich den Ethernetserver 2 mal starte?
Irgendwie habe ich mit dem zusammenspiel von Ethernet und SD-Karte
klärungsbedarf.

Der aktuelle Code:

Quote
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x65, 0x3A };
byte ip[] = { 192, 168, 1, 2 };
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetServer server(80); //server port

String readString;

long Sperrzeit    = 1200000;  // 20min = 1 200 000
long Abschaltzeit = 1500000;  // 25min = 1 500 000
long LetzteZeitSperr;         // Sperrzeit bei Falscher Antwort
long LetzteZeitAus;           // Zeit um Aus Automatisch

int Fragencounter = 0;    // Zähler aktuelle Frage
int AusPin        = 5;    // Pin mit Relais Aus
int StatusAusPin  = LOW;  // Statusspeicher des Relais für AUS
int Filenummer    = 0;    // Auswahlnummer zur Dateiöffnung
int StatusFalscheFrage = LOW;   // Frage Falsch = Sperrzeit abwarten

//////////////////////

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

  pinMode(10,OUTPUT);          // disable w5100 while setting up SD
  digitalWrite(10,HIGH);
  Serial.print("Starting SD..");
  if(!SD.begin(4)) Serial.println("failed");
  else Serial.println("ok");

  Ethernet.begin(mac, ip, gateway, subnet);
  digitalWrite(10,HIGH);

  server.begin();
  Serial.println("Ready");
}

void loop(){
// ------------------------------------------------------------------------- Abschaltzeit  
  if (millis() - LetzteZeitAus > LetzteZeitAus) {
      StatusAusPin = false; }
    else {
      StatusAusPin = true;
      digitalWrite(AusPin, StatusAusPin);
  }

// ------------------------------------------------------------------------- Sperrzeit falsche Frage  
  if (StatusFalscheFrage = HIGH) {
    if (millis() - LetzteZeitSperr > Sperrzeit) {
      StatusFalscheFrage = HIGH; }
    else {
      StatusFalscheFrage = LOW;
    }
  }

// ------------------------------------------------------------------------- Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (readString.length() < 100) {             //read char by char HTTP request
          readString += c;                           //store characters to string
        }
        if (c == '\n') {                             //if HTTP request has ended
          LetzteZeitAus = millis();        
          Serial.println(readString);                //print to serial monitor for debuging
          client.stop();

// ------------------------------------------------------------------------- Programmstand erkennen
          Filenummer = 0;
          if(readString.indexOf("Joker=Joker+einl") > -1) {         // ----- Joker einlösen
            if(readString.indexOf("Code=36811") > -1) {             //// --- Code Frage 2
              Serial.println("Code Frage 2 erkannt");
              Fragencounter = 2;
              printMyFile("0102fr.txt");..........................................................

..........................................   }
          else if(Fragencounter >> 1 && readString.indexOf("Antw=") > -1) {     // ----- Frage 1
            Serial.println("Antwort Frage erkannt");
            if (readString.indexOf("Antw=B") > -1) {                      //// --- Richtig
              Serial.println("Richtig"); }
            else {
              Serial.println("Falsch");
            }
          }
          else {                                                               // ----- Nichts erkannt - neuladen
              Serial.println("Keine Anfrage erkannt - neuladen");
          }
          }
        }
      }
    }
  }


// ------------------------------------------------------------------------- Client ausgeben

void printMyFile(char* filename) {
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        client.println("HTTP/1.1 200 OK"); //send new page
        client.println("Content-Type: text/html");
        client.println();
        File myFile = SD.open(filename);
        if (myFile) {
          while (myFile.available()) {
            client.write(myFile.read());
          }
        myFile.close();
        }
       delay(1);
       //stopping client
       client.stop();

      }
    }
  }
}

Wer kann und will mir helfen?

;-)

Edit:
Wäre es vielleicht eine Lösung "Client" an die neue Funktion zu übergeben?
Damit könnte ich den 2. EthernetClient aufruf sparen.
Wie kann das bewerkstelligt werden?

Sven
« Last Edit: January 02, 2013, 11:49:43 am by SvenM » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kann es daher kommen das ich den Ethernetserver 2 mal starte?

Ja, Du deklarierst zweimal die Variable mit dem Namen client, und zwar mit unterschiedlichem Gültigkeitsbereich: Einmal in der Funktion "loop" und einmal in der Funktion "printMyFile".

Mache Dir klar, was das bedeutet:

 EthernetClient client = server.available();

Das sind eigentlich zwei Programmzeilen zusammengefasst, und zwar eine Variablendeklaration:
 EthernetClient client; // Deklarieren den Namen "client" vom Typ "EthernetClient" (was ein Objekttyp aus einer Library ist).
und einer Zuweisung:
client = server.available();
wobei "server" ebenfalls ein Objekt aus einer Library ist (Typ EthernetServer), das ganz oben in Deinem Programmcode deklariert ist.

Am besten machst Du Dir mal Gedanken über den GÜLTIGKEITSBEREICH von deklarierten Namen:
- Deklaration innerhalb einer Funktion ==> Gültig nur innerhalb der Funktion ("lokale Variable")
- Deklaration außerhalb einer Funktion ==> Gültig im ganzen Programm ("globale Variable")

Du hast nun zwei Möglichkeiten, den Client in der Funktion verfügbar zu machen: Entweder erweiterst Du die Parameterliste der selbstgeschriebenen Funktion (in der bisher nur der String als Dateiname übergeben wird) um einen weiteren Paramter passenden Typs, um den "client" ebenfalls als Parameter zu übergeben.

Oder Du machst mit "client" das, was auch mit "server" der Fall ist: Eine "globale Variable" deklarieren statt einer lokalen Variablen, die nur in "loop" gültig ist.

Also deklarierst Du oben im Code (außerhalb von Funktionen!) sowohl "server" als auch "client" als globale Variablen:
(Oberhalb/außerhalb der loop und anderen Funktionen, globale Variablen):
EthernetServer server(80); //server port
EthernetClient client;

Und dann stehen sowohl die Variablen "client" als auch "server" im ganzen Programm zur Verfügung, einschließlich Deinen selbstgeschriebenen Funktionen, ohne dass eine Übergabe als Parameter notwendig ist.

Die bisherige Deklaration an der Stelle in der loop muss dann dort natürlich verschwinden (sonst hättest Du wieder eine doppelte Deklaration), aus der bisherigen "Deklaration mit Zuweisung" in der Loop wird einfach nur eine Zuweisung:
(In der loop) aus:
EthernetClient client = server.available(); // Deklaration und Zuweisung
wird:
client = server.available(); // Zuweisung

Und in Deiner selbstgeschriebenen Funktionen natürlich genau dasselbe.
So ungefähr. Dann hast Du am jeweils eine "globale" Deklaration für "server" und für "client" (Deklaration "oben" im Programm und außerhalb von allen Funktionen) und kannst diese in jeder Funktion Deines Programms verwenden, ohne sie per Funktionsparameter übergeben zu müssen.
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Einen Schritt weiter, aaber....

Jetzt kommt das Problem mit der SD-Karte zum tragen.

Leider initialisiert sich der SD-Kartenleser nicht mehr korrekt.

Im seriellen Monitor erscheint nur noch:

Quote
Starting SD..

Die Funktion habe ich nun so programiert und es erscheint auch keine Fehlermeldung.

Ein Auszug:

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

  pinMode(10,OUTPUT);          // disable w5100 while setting up SD
  digitalWrite(10,HIGH);
  Serial.print("Starting SD..");
  if(!SD.begin(4)) Serial.println("failed");
  else Serial.println("ok");

  Ethernet.begin(mac, ip, gateway, subnet);
  digitalWrite(10,HIGH);
  delay(2);
  server.begin();
  Serial.println("Ready");
  
}

EthernetClient client;

void loop(){

// ------------------------------------------------------------------------- Create a client connection
  client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (readString.length() < 100) {             //read char by char HTTP request
          readString += c;                           //store characters to string
        }
        if (c == '\n') {                             //if HTTP request has ended
          LetzteZeitAus = millis();        
          Serial.println(readString);                //print to serial monitor for debuging

          if(readString.indexOf("Joker=Joker+einl") > -1) {         // ----- Joker einlösen
            if(readString.indexOf("Code=36811") > -1) {             //// --- Code Frage 2
              Serial.println("Code Frage 2 erkannt");
              Fragencounter = 2;
              printMyFile("0102fr.txt");
            }....................

          .............client.stop();
          }
        }
      }
    }
  }


// ------------------------------------------------------------------------- Client ausgeben

void printMyFile(char* filename) {
   client.println("HTTP/1.1 200 OK");
   client.println("Content-Type: text/html");
   client.println();
   File myFile = SD.open(filename);
   if (myFile) {
     while (myFile.available()) {
       client.write(myFile.read());
     }
     myFile.close();
   }
   delay(1);
}

So sieht es jetzt aus. Wo könnte noch ein Fehler liegen?

Grüße
Sven
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 57
Posts: 3005
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Serial.print("Starting SD..");
  if(!SD.begin(4)) Serial.println("failed");
  else Serial.println("ok");

Wenn nach "Starting SD.." deine Ausgabe weder "failed" noch "ok" ist,
   ...hast du eventuell nicht genug RAM frei und SD.begin() zerschiesst die eigene Rücksprungadresse auf dem Stack.

Kommt denn wenigstens "..failed", wenn gar keine Karte steckt ?
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aktuell ist es so das sich bei gesteckter Karte das "Starting SD" komplett verhackt im Monitor todläuft.

Bei nicht gesteckter Karte Erscheint im 1 Sekunden rythmus "Starting SD..Starting SD..Starting SD...usw...."

Keine Ahnung ob es zur sache beiträgt, aber die Sketchgröße beträgt aktuell ca. 25.000 Bytes.

Grüße
Sven
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wo könnte noch ein Fehler liegen?

Hast Du jetzt noch andere Erweiterungen in den Sketch eingebaut?

Wenn nicht, sollte das Programm einerseits durch die Verwendung von Funktionen kleiner werden, andererseits steigt der Speicherbedarf im RAM auf dem Stack an, weil da Rücksprungadresse und Parameter im RAM abgelegt werden beim Funktionsaufruf. Wenn der Speicher schon vorher bis zum Anschlag ausgereizt war, können die vier Bytes für den Stack natürlich der Tropfen sein, der das Fass zum Überlaufen bringt.

Andererseits könnte es sein, dass die Initialisierung nur scheinbar nicht läuft, weil das Programm nach dem Serial.println weiterläuft und es auch dann abstürzen kann, bevor die Zeichen über die serielle Schnittstelle eintrudeln. Die serielle Schnittstelle ist nämlich lahm. Probiere mal ein delay hinter der Karteninitialisierung:

  Serial.print("Starting SD..");
  if(!SD.begin(4)) Serial.println("failed");
  else Serial.println("ok");
  delay(3000);

Macht das einen Unterschied und Du siehst entweder "failed" oder "ok"?
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So ich bastele munter weiter...

Aber irgendwie reicht es noch nicht zum Durchbruch.

Das zeigt mein Monitor mit delay auf 3000 nach einem Reset:

Quote
StartinktktaStartikt´*WÉÑ¥­ÑÑStarti11StStartinkSk2º*WÉÑ¥­M2tStartik1tk2StartinStkt*WÉÑ¥¹­Ñ­ÑMхÉÑ¥¹­Ñ­Éº*WÉÑ¥ÅSa2tStartikStktStartinSt11StartinkS

Aktueller Programmstand komplett:

Quote
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x65, 0x3A };
byte ip[] = { 192, 168, 1, 2 };
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };

EthernetServer server(80); //server port

String readString;

long Sperrzeit         = 1200000; // 20min = 1 200 000
long Abschaltzeit      = 1500000; // 25min = 1 500 000
long LetzteZeitSperr;             // Sperrzeit bei Falscher Antwort
long LetzteZeitAus;               // Zeit um Aus Automatisch

int Fragencounter      = 0;       // Zähler aktuelle Frage
int AusPin             = 5;       // Pin mit Relais Aus
int StatusAusPin       = LOW;     // Statusspeicher des Relais für AUS
int StatusFalscheFrage = LOW;     // Frage Falsch = Sperrzeit abwarten

void setup(){

  Serial.begin(9600);

  pinMode(10,OUTPUT);
  digitalWrite(10,HIGH);
  Serial.print("Starting SD..");
  if(!SD.begin(4)) Serial.println("Fehler");
  else Serial.println("Ok");
  delay(2000);
  
  Ethernet.begin(mac, ip, gateway, subnet);
  digitalWrite(10,HIGH);

  server.begin();
  Serial.println("Server Ready");
  delay(2000);
}

EthernetClient client;
  
void loop(){
// ------------------------------------------------------------------------- Abschaltzeit  
  if (millis() - LetzteZeitAus > LetzteZeitAus) {
      StatusAusPin = false; }
    else {
      StatusAusPin = true;
      digitalWrite(AusPin, StatusAusPin);
  }

// ------------------------------------------------------------------------- Sperrzeit falsche Frage  
  if (StatusFalscheFrage = HIGH) {
    if (millis() - LetzteZeitSperr > Sperrzeit) {
      StatusFalscheFrage = HIGH; }
    else {
      StatusFalscheFrage = LOW;
    }
  }

// ------------------------------------------------------------------------- Create a client connection
  client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (readString.length() < 100) {             //read char by char HTTP request
          readString += c;                           //store characters to string
        }
        if (c == '\n') {                             //if HTTP request has ended
          LetzteZeitAus = millis();        
          Serial.println(readString);                //print to serial monitor for debuging
          client.stop();

// ------------------------------------------------------------------------- Programmstand erkennen
          if(readString.indexOf("Joker=Joker+einl") > -1) {         // ----- Joker einlösen
            if(readString.indexOf("Code=36811") > -1) {             //// --- Code Frage 2
              Serial.println("Code Frage 2 erkannt");
              Fragencounter = 2;
              printMyFile("0102fr.txt");
            }
            else if (readString.indexOf("Code=63026") > -1) {       //// --- Code Frage 3
              Serial.println("Code Frage 3 erkannt");
              Fragencounter = 3;
              printMyFile("0103fr.txt");
            }
            else if (readString.indexOf("Code=98222") > -1) {       //// --- Code Frage 4
              Serial.println("Code Frage 4 erkannt");
              Fragencounter = 4;
              printMyFile("0104fr.txt");
            }          
            else if (readString.indexOf("Code=23284") > -1) {       //// --- Code Frage 5
              Serial.println("Code Frage 5 erkannt");
              Fragencounter = 5;
              printMyFile("0105fr.txt");
            }          
            else if (readString.indexOf("Code=88168") > -1) {       //// --- Code Frage 6
              Serial.println("Code Frage 6 erkannt");
              Fragencounter = 6;
              printMyFile("0106fr.txt");
            }            
            else if (readString.indexOf("Code=47022") > -1) {       //// --- Code Frage 7
              Serial.println("Code Frage 7 erkannt");
              Fragencounter = 7;
              printMyFile("0107fr.txt");
            }            
            else if (readString.indexOf("Code=20692") > -1) {       //// --- Code Frage 8
              Serial.println("Code Frage 8 erkannt");
              Fragencounter = 8;
              printMyFile("0108fr.txt");
            }            
            else if (readString.indexOf("Code=80692") > -1) {       //// --- Code Frage 9
              Serial.println("Code Frage 9 erkannt");
              Fragencounter = 9;
              printMyFile("0109fr.txt");
            }            
            else if (readString.indexOf("Code=39762") > -1) {       //// --- Code Frage 10
              Serial.println("Code Frage 10 erkannt");
              Fragencounter = 10;
              printMyFile("0110fr.txt");
            }            
            else if (readString.indexOf("Code=46047") > -1) {       //// --- Code Frage 11
              Serial.println("Code Frage 11 erkannt");
              Fragencounter = 11;
              printMyFile("0111fr.txt");
            }              
            else if (readString.indexOf("Code=97346") > -1) {       //// --- Code Frage 12
              Serial.println("Code Frage 12 erkannt");
              Fragencounter = 12;
              printMyFile("0112fr.txt");
            }              
            else if (readString.indexOf("Code=68095") > -1) {       //// --- Code Frage 13
              Serial.println("Code Frage 13 erkannt");
              Fragencounter = 13;
              printMyFile("0113fr.txt");
            }              
            else if (readString.indexOf("Code=92060") > -1) {       //// --- Code Frage 14
              Serial.println("Code Frage 14 erkannt");
              Fragencounter = 14;
              printMyFile("0114fr.txt");
            }              
            else if (readString.indexOf("Code=05860") > -1) {       //// --- Code Frage 15
              Serial.println("Code Frage 15 erkannt");
              Fragencounter = 15;
              printMyFile("0115fr.txt");
            }              
            else if (readString.indexOf("Code=") > -1) {            //// --- Kein Code eingegeben
              Serial.println("Kein Code eingegeben");
              Fragencounter = 0;
              printMyFile("startp.txt");
            }
          }
          else if(readString.indexOf("Neu=Neues+Spiel") > -1) {     // ----- Neues Spiel
              Serial.println("Neues Spiel starten erkannt und Zeit abfragen");
              if  (StatusFalscheFrage == HIGH) {
                Serial.println("Neustart gesperrt");
                printMyFile("zsperr.txt");
              }
              else if (StatusFalscheFrage == LOW) {
                Serial.println("Neustart frei");
                Fragencounter = 1;
                printMyFile("0101fr.txt");
              }
          }
          else if(Fragencounter >> 1 && readString.indexOf("Antw=") > -1) {     // ----- Frage 1
            Serial.println("Antwort Frage erkannt");
            if (readString.indexOf("Antw=B") > -1) {                      //// --- Richtig
              Serial.println("Richtig"); }
            else {
              Serial.println("Falsch");
            }
          }
          else {                                                               // ----- Nichts erkannt - neuladen
              Serial.println("Keine Anfrage erkannt - neuladen");
          }
          }
          client.stop();
          readString="";
        }
      }
    }
  }


// ------------------------------------------------------------------------- Client ausgeben

void printMyFile(char* filename) {
   client.println("HTTP/1.1 200 OK");
   client.println("Content-Type: text/html");
   client.println();
   File myFile = SD.open(filename);
   if (myFile) {
     while (myFile.available()) {
       client.write(myFile.read());
     }
     myFile.close();
   }
   delay(1000);
}
  


Jooo.....

G
Sven
« Last Edit: January 02, 2013, 01:58:34 pm by SvenM » Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn ich so drüber nachdenke beduetet das doch das der Pin 4 HIGH wird und wieder abfällt. Aus keinem anderen Grund würde sonst die Initialisierung neu starten. Oder?
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das zeigt mein Monitor mit delay:

Quote
Startinktkta

Das sieht für mich verdächtig danach aus, als wenn der RAM-Speicher Deines Controllers zu klein ist, bzw. Du mit Deinem Sketch zu viel RAM-Speicher verwendest, so dass da schon beim Programmstart Variablenbereiche überschrieben werden. Denn sonst sollten wenigstens mit dem eingebrachten delay die Initialisierungstexte der setup-Funktion soweit einwandfrei im Serial Monitor rüberkommen.

Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja das scheint es zu sein.... :-(

Ich habe soeben einige Serial-Ausgaben gestrichen und dann kommt die Meldung der SD Karte wie gewohnt....

Aber der Server-Ready kommt nicht. Kann das auch am Speicher hängen?
Oh, jetzt kommt es. Mit etwas zeitlicher Verzögerung. Aber das Board reagiert nicht auf meine Anfragen...

Was würde Arbeitsspeicher sparen?


Grüße
Sven
 
« Last Edit: January 02, 2013, 02:26:22 pm by SvenM » Logged

Pages: [1] 2   Go Up
Jump to: