RTV forum PL | NewsGroups PL

Arduino + karta SD

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Arduino + karta SD

Michal M. Lechanski
Guest

Sun Jan 26, 2020 3:18 pm   



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.
1. Log file: 2.tx created.
2. Log file: 2.txt updated.
2. Log file: 2.tx updated.
2. File 2.txt doesn't exist.
2. File 2.tx doesn't exist.
2. 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ę.

--
Michał

Marek
Guest

Mon Jan 27, 2020 10:01 am   



On Sun, 26 Jan 2020 14:18:41 +0000, "Michal M. Lechanski"
<michal_at_doriath.eu> wrote:
Quote:
Bardzo proszę o podpowiedź co robię źle, dlaczego pliki nie są
uaktualniane?
Pomożecie? Z góry bardzo dziękuję.

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ą).

--
Marek

J.F.
Guest

Mon Jan 27, 2020 12:53 pm   



Użytkownik "Marek" napisał w wiadomości grup
dyskusyjnych:almarsoft.5809471622513639103_at_news.neostrada.pl...
On Sun, 26 Jan 2020 14:18:41 +0000, "Michal M. Lechanski"
<michal_at_doriath.eu> wrote:
Quote:
Bardzo proszę o podpowiedź co robię źle, dlaczego pliki nie są
uaktualniane?
Pomożecie? Z góry bardzo dziękuję.

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ą).

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.

Marek
Guest

Mon Jan 27, 2020 1:37 pm   



On Mon, 27 Jan 2020 12:53:34 +0100, "J.F."
<jfox_xnospamx_at_poczta.onet.pl> wrote:
Quote:
Albo ... open otworzylo, a potem plik znikl, przynajmniej dla
exist().

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ł.

--
Marek

J.F.
Guest

Mon Jan 27, 2020 2:03 pm   



Użytkownik "Marek" napisał w wiadomości grup
dyskusyjnych:almarsoft.1846336003799716332_at_news.neostrada.pl...
On Mon, 27 Jan 2020 12:53:34 +0100, "J.F."
<jfox_xnospamx_at_poczta.onet.pl> wrote:
Quote:
Albo ... open otworzylo, a potem plik znikl, przynajmniej dla
exist().

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.

Tez tak widze, ale moze jakies opoznienia w zapisie ?

Quote:
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ł.

Tez tak mysle, a jednak cos nie dziala ..

J.

Marek
Guest

Mon Jan 27, 2020 5:26 pm   



On Mon, 27 Jan 2020 14:03:44 +0100, "J.F."
<jfox_xnospamx_at_poczta.onet.pl> wrote:
Quote:
Tez tak mysle, a jednak cos nie dziala ..

Dlatego stawiam jednak na problem z użytkownikiem.

--
Marek

Michal M. Lechanski
Guest

Mon Jan 27, 2020 9:02 pm   



W dniu 27.01.2020 o 16:26, Marek pisze:
Quote:
On Mon, 27 Jan 2020 14:03:44 +0100, "J.F."
jfox_xnospamx_at_poczta.onet.pl> wrote:
Tez tak mysle, a jednak cos nie dziala ..

Dlatego stawiam jednak na problem z użytkownikiem.

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...

--
Michał

elektroda NewsGroups Forum Index - Elektronika Polska - Arduino + karta SD

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map