Arduino + karta SD

Dzień dobry,

Arduino Mega i taki kod:

#include <SPI.h>

#include <SD.h>

File myFile; File meFile; String file_name; String file_name2; int filenameNumber = 1; int fileData = 0;

void createlogFile() { String ext = ".txt"; String ext2 = ".tx"; while (1) { file_name = filenameNumber + ext; file_name2 = filenameNumber + ext2; if (SD.exists(file_name) == false) { break; } else { filenameNumber++; } } myFile = SD.open(file_name, FILE_WRITE); myFile.close();

if (SD.exists(file_name)) { Serial.print("1. Log file: "); Serial.print(file_name); Serial.println(" created."); } delay(50); meFile = SD.open(file_name2, FILE_WRITE); meFile.close();

if (SD.exists(file_name2)) { Serial.print("1. Log file: "); Serial.print(file_name2); Serial.println(" created."); } }

void updatelogFile() { delay(50); if (SD.exists(file_name)) { myFile = SD.open(file_name, FILE_WRITE); myFile.print("# "); myFile.println(fileData); myFile.close(); Serial.print("2. Log file: "); Serial.print(file_name); Serial.println(" updated."); } else { Serial.print("2. File "); Serial.print(file_name); Serial.println(" doesn't exist."); } delay(50); if (SD.exists(file_name2)) { meFile = SD.open(file_name2, FILE_WRITE); meFile.print("# "); meFile.println(fileData); meFile.close(); Serial.print("2. Log file: "); Serial.print(file_name2); Serial.println(" updated."); } else { Serial.print("2. File "); Serial.print(file_name2); Serial.println(" doesn't exist."); } }

void setup() { Serial.begin(115200); Serial.print(F("Initializing SD card...")); while (!SD.begin(53)) { Serial.println(F("initialization failed!")); } Serial.println(F("initialization done.")); createlogFile(); }

void loop() { updatelogFile(); delay(1000); fileData++; }

Kompiluje się to bez problemów i daje taki log:

Initializing SD card...initialization done.

  1. Log file: 2.txt created.
  2. Log file: 2.tx created.
  3. Log file: 2.txt updated.
  4. Log file: 2.tx updated.
  5. File 2.txt doesn't exist.
  6. File 2.tx doesn't exist.
  7. File 2.txt doesn't exist.

na karcie pliki oczywiście istnieją:

Volume in drive E has no label. Volume Serial Number is 6CE0-F3F8

Directory of E:\

01/01/2000 01:00 654 1.TXT 01/01/2000 01:00 8 1.TX 01/01/2000 01:00 3 2.TXT 01/01/2000 01:00 0 2.TX 23/01/2020 11:22 <DIR> libraries 23/01/2020 11:22 <DIR> hardware 26/01/2020 13:26 0 log2.txt 5 File(s) 665 bytes 2 Dir(s) 7,897,579,520 bytes free

Bardzo proszę o podpowiedź co robię źle, dlaczego pliki nie są uaktualniane?

Pomożecie? Z góry bardzo dziękuję.

Reply to
Michal M. Lechanski
Loading thread data ...

A metoda SD.exist() wywoływana wielokrotnie na tej samej nazwie pliku (istniejącego) zawsze zwraca true? Bo to wygląda jakby kolejne wywołania tej metody już nie zwracały true mimo, że plik istnieje (popsuta biblioteka, komunikacja z kartą).

Reply to
Marek

Albo ... open otworzylo, a potem plik znikl, przynajmniej dla exist().

Ale na karcie pliki jednak sa, co ciekawe - z rozna iloscia danych. Skutek wczesniejszych eksperymentow, czy blokuje sie gdzies przy zapisie do 2.TX ?

J.

Reply to
J.F.

Ale o ile dobrze spojrzałem on nie testuje exist na otwartym pliku. Jeśli użycie pary open-close na istniejącym pliku zaburza exist (użyte po close) to jest zdrowo popsuta biblioteka. Co mnie z kolei dziwi bo liby Arduino są dosyć mocno czochrane przez userow i taki poważny bug długo by się nie uchował.

Reply to
Marek

Tez tak widze, ale moze jakies opoznienia w zapisie ?

Tez tak mysle, a jednak cos nie dziala ..

J.

Reply to
J.F.

Dlatego stawiam jednak na problem z użytkownikiem.

Reply to
Marek

W dniu 27.01.2020 o 16:26, Marek pisze:

Takie były i moje typy. Dla spokojności jednak skompilowałem ten kod na innym komputerze i okazało się że wszystko działa bez błędów. Czyli raczej biblioteka bo płytka Arduino i czytnik karty były ten same.

Dziwi mnie tylko jak to możliwe, bo instalacje Arduino IDE na obu komputerach były uaktualnione do najnowszej wersji tego samego dnia. No chyba że biblioteki (te w katalogu instalacyjnym, bo te w katalogu użytkownika są identyczne na obu komputerach) raz zainstalowane nie są uaktualniane.

Tak czy siak, dziękuję za zainteresowanie. Wygląda że problem rozwiązany.

Przy okazji zapytam o moduły czytników kart - dlaczego czytniki kart microSD maja jeden rządek pinów, a kart SD dwa? Opisy są takie same na obu modułach ale wygląda że te piny są zdublowane na czytniku "dużych" kart SD...

Reply to
Michal M. Lechanski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.