Skocz do zawartości

Czytnik kart SD - pomoc z odczytem


jasiekk913

Pomocna odpowiedź

@dambo Dobra, udało mi się skompilować! Wielkie dzięki za pomoc, dzięki tobie poznałem trochę wiedzy 🙂. Czyli teraz ten plik wrzucić na microsd i a na arduino ma być program typu:
 

char zmienna[1000];
int i=0;
myFile = SD.open("binary_file");
  if (myFile) {
	while (myFile.available()) {
      zmienna[i]=myFile.read();
      i++;
    }
    // close the file:
    myFile.close();

Oczywiście jest to przykład.

Pozdrawiam
jasiekk

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

char zmienna[1000];
myFile = SD.open("binary_file");
if (myFile) 
{
    file.read(zmienna, <rozmiar_pliku/tablicy>);
}
// close the file:
myFile.close();

nie musisz w pętli - możesz podać w funkcji read dokąd ma wkleić dane i ile ich ma być

Link do komentarza
Share on other sites

No niestety, napisałem program, arduino nie przekazuje danych o pliku nic.txt:

 

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

const int chipSelect = 4;
char test[500];
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("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");

  File dataFile = SD.open("nic.txt");

  // if the file is available, write to it:
  if (dataFile) {
    int i=0;
    while (dataFile.available()) {
      test[i]=dataFile.read();
      i++;
    }
    for(int k=0; k<498; k++){
    Serial.write(test[k]);
    }
    dataFile.close();
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}

void loop() {
}

 

Link do komentarza
Share on other sites

No ale to mogłeś przesłać co się wyświetla na terminalu jak uruchomisz taką apkę - karta jest poprawnie zainicjalizowana i plik się poprawnie otwiera, tak?

Zobacz też, że w tym miejscu:

    while (dataFile.available()) {
      test[i]=dataFile.read();
      i++;
    }

jeśli plik jest większy niż tablica to sobie nadpisujesz pamięć i aplikacja się wywali - to trzeba zabezpieczyć. I generalnie celuję w to, że właśnie to się dzieje jeśli plik się wczytuje i generalnie nie ma błędów połączeniowych.

Link do komentarza
Share on other sites

Przed chwilą, dambo napisał:

arta jest poprawnie zainicjalizowana i plik się poprawnie otwiera, tak?

Tak
 

1 minutę temu, dambo napisał:

aplikacja się wywali

i chyba nawet to się dzieje bo widzę że karta inicjalizuje się co ~5 sekund (a jest w void setup). W takim razie spróbuje zrobić to tak jak mówisz i dam znać.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.