Ethernetshield met Sd-Card ziet geen bestanden op SD-Card

Hardware geleverd door Arduino
Berichten: 7
Geregistreerd: 30 Dec 2016, 10:51
Woonplaats: Utrecht

Ethernetshield met Sd-Card ziet geen bestanden op SD-Card

Berichtdoor Misha » 30 Dec 2016, 11:41

Hallo allemaal,

Ik ben sinds vorige week nieuw begonnen met Arduino (UNO) met een Ethernet shield inclusief een CD-Card Reader en reuze enthousiast. :mrgreen:

Mijn eerste project is een Klik Aan Klik Uit controller via wifi. Ik had dit twee dagen geleden werkend en dat ging best goed. De web pagina wilde ik de volgende dag nog wat verbeteren en aanpassen aan mijn smaak. Dus de volgende dag de boel weer opgestart. Wil de arduino geen bestanden meer lezen van de SD-Card. :oops: Krijg steeds "index.htm not found". Wel wordt de SD-Card succesvol geïnitialiseerd!

Wat heb ik geprobeerd:
- SD-Card (2Gb) opnieuw geformatteerd (FAT16). Onder Windows zijn de bestanden gewoon te zien. In de Arduino file not found.
- Andere SD-Card (16GB) geformatteerd (FAT16). Zelfde verschijnsel.
- SD-Card (2Gb) opnieuw geformatteerd (FAT32). Zelfde verschijnsel.
- Andere sketches geprobeerd. Zelfde verschijnsel.
- Voorbeeld sketch geprobeerd voor het zichtbaar maken van de DIR op de SD-Card. Hij ziet de Sd-Card wel maar laat geen bestanden zien.

Aan mijn werkende sketch is niets veranderd. Ook getest met de originele index.htm. Niets maakt dat ik iets kan lezen van de SD-Card.

Hebben jullie nog ideeën hoe ik dit kan oplossen of is het een hardware probleem van de Ethernet shield?


Groetjes Misha.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor nicoverduin » 30 Dec 2016, 12:06

En als je die kaart op de PC leest? Zie je dan wel index.htm?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor Koepel » 30 Dec 2016, 12:11

Je kunt de SD Card Formatter gebruiken, zoals hier beschreven : http://forum.arduino.cc/index.php?topic=228201.0.
De 2GB geheugenkaart heeft een grotere kans om compatible te zijn.
Heb je iets gedaan met pin 4 ? (dat is de ChipSelect voor de SD card).

Berichten: 7
Geregistreerd: 30 Dec 2016, 10:51
Woonplaats: Utrecht

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor Misha » 30 Dec 2016, 12:19

Ja Nico.

Zoals ik al gemeld had zie ik in Windows de bestanden gewoon staan.

Groetjes Misha.

Berichten: 7
Geregistreerd: 30 Dec 2016, 10:51
Woonplaats: Utrecht

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor Misha » 30 Dec 2016, 12:27

Sorry Nico,

Ik had niet alles op mijn telefoon gelezen. Bedankt voor de tip van sd formatter. Ga ik vanmiddag proberen.

Pin 4, 10-12 gebruik ik niet ivm sd card en ethernet controller.


Ik hou je/jullie op de hoogte.


Groetjes Misha.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor nicoverduin » 30 Dec 2016, 12:52

Zet anders je code even hier neer.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 30 Dec 2016, 10:51
Woonplaats: Utrecht

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor Misha » 30 Dec 2016, 16:55

Hallo Nico en anderen,

Ik heb de sd formatter gebruikt om de sd card te formateren maakt niets uit. Nog steeds geen bestanden te lezen.

Getest met "Voorbeelden/SD/Listfiles"
Code: Alles selecteren
     Initializing SD card...initialization done.
     printDirectory ... True         <-- deze regel er zelf aan toegevoegd om te zien of de routine wel wordt uitgevoerd!
     No more files!                   <-- deze regel er zelf aan toegevoegd om te zien of de routine wel wordt uitgevoerd!
     done!


Daarna SDFAT gedownload en na wat gepruts (installeren van de zip ging niet, daarna ipv SDFAT_Master, SDFAT in Library geplaatst) SDFAT gebruikt om de sd card te formateren. Zelfde resultaat als boven.


@Nico, ik wil je mijn code wel sturen, maar welke zal ik je dan sturen? Ik gebruik gewoon de voorbeelden die bij Arduino zitten. Dat zou toch altijd moeten werken!

Ik weet het niet meer. Ik denk dat de shield het begeven heeft, want op het web kan ik over dit probleem eigenlijk ook niets vinden. Hoe het dan komt is mij een raadsel, want het werkte de dag ervoor uitstekend en ik was superblij dat het me gelukt was. Het is toch gelijk wel een uitdagend eerste arduino project. Hoe nu verder?


Groetjes Misha.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor nicoverduin » 30 Dec 2016, 18:29

Tja dan houdt het denk ik op. Als hij zegt dat hij goed is maar volgens hem staat er niets terwijl de SD kaart zelf wel goed is, dan wordt het een SD shield vervangen op de ethernet kaart. Denk dat een ethernetkaart goedkoper is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 30 Dec 2016, 10:51
Woonplaats: Utrecht

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor Misha » 30 Dec 2016, 19:38

Hallo Nico en anderen,

Ben na het testen met SDFAT hier eens mee aan het spelen gegaan. Uiteindelijk bleek dat SDFAT wel de files op de SD Card ziet als ik een DIR opvraag. Dus de hardware is niet defect. :D :D :D Da's mooi dacht ik toen. Ga ik de SDFAT library gebruiken.
Deze toegevoegd aan mijn sketch en inderdaad ziet hij nu mijn index05.htm file. Echter er komt geen webpagina op de client na connectie.
Ik heb wat serials geplaatst in de sketch waarna bleek dat deze na het ontvangen van een REQ niet naar de client wordt gestuurd.

eth_websrv_SDFAT_Ajax_in_out_ms07_8_buttons.ino
Initializing SD card...
SUCCESS - SD card initialized.
SUCCESS - Found index05.htm file.

!!!!! NewLine ontvangen en currentLineIsBlank !!!!!
!!!!! Web page request !!!!!
Web page request, send rest of HTTP header
!!!!! Trying to open Index File !!!!!
!!!!! Index File NOT Opend !!!!!
GET / HTTP/1.1
Host: 192.168.1.210
Connection: keep-alive
!!!!! NewLine ontvangen en currentLineIsBlank !!!!!
!!!!! Web page request !!!!!
Web page request, send rest of HTTP header
!!!!! Trying to open Index File !!!!!
!!!!! Index File NOT Opend !!!!!
GET /favicon.ico HTTP/1.1
Host: 192.168.1.210
Connection:


De index file wordt dus niet geopend!

Nou denk ik dat SDFAT wellicht daarvoor een andere code gebruikt. Ik heb hiernaar gezocht maar kom er niet uit. Kunnen jullie mij helpen dit aan te passen?

Code: Alles selecteren
//#include <RemoteTransmitter.h>
//#include <NewRemoteTransmitter.h>
#include <SPI.h>
#include <Ethernet.h>
//#include <SD.h>
#include "SdFat.h"
SdFat SD;

// SD card chip select
int chipSelect = 4;

// Pin waarop de te zenden data moet worden gezet
int TransmitPin = 3; 

// Initiate Transmitters
//ActionTransmitter actionTransmitter(TransmitPin);
//KaKuTransmitter kaKuTransmitter(TransmitPin);
//BlokkerTransmitter blokkerTransmitter(TransmitPin);
//ElroTransmitter elroTransmitter(TransmitPin);

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ  60

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 210); // IP address, may need to change depending on network

//  WebServer
EthernetServer server(80);  // create a server at port 80
File webFile;               // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
//char req_index = 0;              // index into HTTP_req buffer
int req_index = 0;              // index into HTTP_req buffer

// Led State Array
boolean LED_state[7] = {0}; // stores the states of the LEDs

void setup()
{
//    ???????? Dan maar disabled!
//    pinMode(12, OUTPUT);
//    digitalWrite(12, HIGH);   // set the LED on
       
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
   
    // Setup communication to Seriele Monitor
    Serial.begin(115200);       // for debugging
    Serial.println(F("eth_websrv_SDFAT_Ajax_in_out_ms07_8_buttons.ino"));
   
    // initialize SD card
    Serial.println(F("Initializing SD card..."));
    if (!SD.begin(chipSelect, SPI_HALF_SPEED)) {
        Serial.println(F("ERROR - SD card initialization failed!"));
        return;    // init failed
    }
    Serial.println(F("SUCCESS - SD card initialized."));
    // check for index.html file
    if (!SD.exists("index05.htm")) {
        Serial.println(F("ERROR - Can't find index05.htm file! "));
        return;  // can't find index file
    }
    Serial.println(F("SUCCESS - Found index05.htm file. "));

    // LEDs, Only for testing output
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
   
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // limit the size of the stored received HTTP request
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    Serial.println();
                    Serial.println(F("!!!!! NewLine ontvangen en currentLineIsBlank !!!!!"));
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    // remainder of header follows below, depending on if
                    // web page or XML page is requested
                    // Ajax request - send XML file
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        Serial.println(F("!!!!! ajax_inputs !!!!!"));
                        // send rest of HTTP header
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        Serial.println(F("!!!!! ajax_inputs, send rest of HTTP header !!!!!"));
                        SetLEDs();
                        // send XML file containing input states
                        XML_response(client);
                    }
                    else {  // web page request
                        Serial.println(F("!!!!! Web page request !!!!!"));
                        // send rest of HTTP header
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        Serial.println(F("!!!!! Web page request, send rest of HTTP header !!!!!"));
                       // send web page
//                        webFile = SD.open("index05.html");        // open web page file
                        webFile = SD.open("index05.html, FILE_READ");        // open web page file
                        Serial.println(F("!!!!! Trying to open Index File !!!!!"));
                       if (webFile) {
                            Serial.println(F("!!!!! Index File Opend !!!!!"));
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                            Serial.println(F("!!!!! Index File Send to client!!!!!"));
                        }
                        else {
                            Serial.println(F("!!!!! Index File NOT Opend !!!!!"));
                        }
                    }
                    // display received HTTP request on serial port
                    Serial.print(HTTP_req);
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
    // LED 1 (pin 6)
    if (StrContains(HTTP_req, "LED1=1")) {
        LED_state[0] = 1;  // save LED state
        SendSignals(0,'A',1,true); // A = KAKU type Transmitter
    }
    else if (StrContains(HTTP_req, "LED1=0")) {
        LED_state[0] = 0;  // save LED state
        SendSignals(0,'A',1,false); // A = KAKU type Transmitter
    }
    // LED 2 (pin 7)
    if (StrContains(HTTP_req, "LED2=1")) {
        LED_state[1] = 1;  // save LED state
        SendSignals(0,'A',3,true); // A = KAKU type Transmitter
    }
    else if (StrContains(HTTP_req, "LED2=0")) {
        LED_state[1] = 0;  // save LED state
        SendSignals(0,'A',3,false); // A = KAKU type Transmitter
    }
    // LED 3 (pin 8)
    if (StrContains(HTTP_req, "LED3=1")) {
        LED_state[2] = 1;  // save LED state
        SendSignals(0,'x',5,true); // x = Blokker type Transmitter
        digitalWrite(8, HIGH);
    }
    else if (StrContains(HTTP_req, "LED3=0")) {
        LED_state[2] = 0;  // save LED state
        SendSignals(0,'x',5,false); // x = Blokker type Transmitter
        digitalWrite(8, LOW);
    }
    // LED 4 (pin 9)
    if (StrContains(HTTP_req, "LED4=1")) {
        LED_state[3] = 1;  // save LED state
        SendSignals(11421962,'z',0,true); // z = New Type KAKU Transmitter
        digitalWrite(9, HIGH);
    }
    else if (StrContains(HTTP_req, "LED4=0")) {
        LED_state[3] = 0;  // save LED state
        SendSignals(11421962,'z',0,false); // z = New Type KAKU Transmitter
        digitalWrite(9, LOW);
    }
//    // LED 5
//    if (StrContains(HTTP_req, "LED5=1")) {
//        LED_state[4] = 1;  // save LED state
////        SendSignals(11421962,'z',0,true); // z = New Type KAKU Transmitter
//    }
//    else if (StrContains(HTTP_req, "LED5=0")) {
//        LED_state[4] = 0;  // save LED state
////        SendSignals(11421962,'z',0,false); // z = New Type KAKU Transmitter
//    }
//    // LED 6
//    if (StrContains(HTTP_req, "LED6=1")) {
//        LED_state[5] = 1;  // save LED state
////        SendSignals(11421962,'z',0,true); // z = New Type KAKU Transmitter
//    }
//    else if (StrContains(HTTP_req, "LED6=0")) {
//        LED_state[5] = 0;  // save LED state
////        SendSignals(11421962,'z',0,false); // z = New Type KAKU Transmitter
//    }
//    // LED 7
//    if (StrContains(HTTP_req, "LED7=1")) {
//        LED_state[6] = 1;  // save LED state
////        SendSignals(11421962,'z',0,true); // z = New Type KAKU Transmitter
//    }
//    else if (StrContains(HTTP_req, "LED7=0")) {
//        LED_state[6] = 0;  // save LED state
////        SendSignals(11421962,'z',0,false); // z = New Type KAKU Transmitter
//    }
//    // LED 8
//    if (StrContains(HTTP_req, "LED8=1")) {
//        LED_state[7] = 1;  // save LED state
////        SendSignals(11421962,'z',0,true); // z = New Type KAKU Transmitter
//    }
//    else if (StrContains(HTTP_req, "LED8=0")) {
//        LED_state[7] = 0;  // save LED state
////        SendSignals(11421962,'z',0,false); // z = New Type KAKU Transmitter
//    }
}

// Send Siganals to transmitter
void SendSignals(long Adress, char Module, byte Channel, boolean State)
{
    Serial.print(F("SendSignals... "));
//    Serial.print(F(", Adress: "));
//    Serial.print(Adress);
//    Serial.print(F(", Module: "));
//    Serial.print(Module);
//    Serial.print(F(", Channel: "));
//    Serial.print(Channel);
//    Serial.print(F(", State: "));
//    Serial.println(State);

    switch (Module) {
      case 'x':
         // Switch Blokker-device 5.
//         blokkerTransmitter.sendSignal(Channel,State);
         break;
      case 'A':
         // Switch KaKu-device
//         kaKuTransmitter.sendSignal(Module,Channel,State);
         break;
      case 'z':
//         Serial.println("New KAKU Transmitter");
         // Create a New Remote transmitter
//         NewRemoteTransmitter transmitter(Adress, TransmitPin, 260, 3);
 
         // Switch New_KAKU_device Adress/Unit, Command.
//         transmitter.sendUnit(Channel, State);
         break;
    }
}

// send the XML file with analog values, switch status and LED status
void XML_response(EthernetClient cl)
{
    int analog_val;            // stores value read from analog inputs
    int count;                 // used by 'for' loops
    int sw_arr[] = {2, 3, 5};  // pins interfaced to switches
   
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
//    // read analog inputs
//    for (count = 2; count <= 5; count++) { // A2 to A5
//        analog_val = analogRead(count);
//        cl.print("<analog>");
//        cl.print(analog_val);
//        cl.println("</analog>");
//    }
//    // read switches
//    for (count = 0; count < 3; count++) {
//        cl.print("<switch>");
//        if (digitalRead(sw_arr[count])) {
//            cl.print("ON");
//        }
//        else {
//            cl.print("OFF");
//        }
//        cl.println("</switch>");
//    }
//    // checkbox LED states
//    // LED1
//    cl.print("<LED>");
//    if (LED_state[0]) {
//        cl.print("checked");
//    }
//    else {
//        cl.print("unchecked");
//    }
//    cl.println("</LED>");
//    // LED2
//    cl.print("<LED>");
//    if (LED_state[1]) {
//        cl.print("checked");
//    }
//    else {
//        cl.print("unchecked");
//    }
//     cl.println("</LED>");

    // button LED states
    // LED1
    cl.print("<LED>");
    if (LED_state[0]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
   
    // LED2
    cl.print("<LED>");
    if (LED_state[1]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
   
    // LED3
    cl.print("<LED>");
    if (LED_state[2]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
   
    // LED4
    cl.print("<LED>");
    if (LED_state[3]) {
        cl.print("on");
    }
    else {
        cl.print("off");
    }
    cl.println("</LED>");
   
//    // LED5
//    cl.print("<LED>");
//    if (LED_state[4]) {
//        cl.print("on");
//    }
//    else {
//        cl.print("off");
//    }
//    cl.println("</LED>");
//   
//    // LED6
//    cl.print("<LED>");
//    if (LED_state[5]) {
//        cl.print("on");
//    }
//    else {
//        cl.print("off");
//    }
//    cl.println("</LED>");
//   
//    // LED7
//    cl.print("<LED>");
//    if (LED_state[6]) {
//        cl.print("on");
//    }
//    else {
//        cl.print("off");
//    }
//    cl.println("</LED>");
//   
//    // LED8
//    cl.print("<LED>");
//    if (LED_state[7]) {
//        cl.print("on");
//    }
//    else {
//        cl.print("off");
//    }
//    cl.println("</LED>");
   
    cl.print("</inputs>");
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
   
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}


Ik heb een aantal zaken uit gezet omdat het geheugen met alle libraries te klein lijkt te worden. Hebben jullie hiervoor ook soms wat tips?

Ik moet ook nog troep opruimen van de originele sketch. :oops: Die heb ik overigens hier vandaan of via deze site: http://www.engineerathome.com/elektronica/automatiseer+je+huis+met+arduino+en+klik+aan+klik+uit/10


Groetjes Misha.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ethernetshield met Sd-Card ziet geen bestanden op SD-Car

Berichtdoor nicoverduin » 30 Dec 2016, 20:56

Sdfat aanpassen lijkt mij de verkeerde optie. En als het een geheugen probleem is dan zou je een andere manier moeten verzinnen voor al die led= vergelijkingen bijvoorbeeld.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten