Arduino Polska Forum

Pełna wersja: Czytnik Kart micro sd - odczyt
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam, rozpocząłem projekt wykorzystujący arduino nano ch340 i popularny moduł czytnika kart micro sd, program ma zapisywać różnorakie parametry w plikach o konkretnych nazwach - niektóre z plików utworzonych na karcie microsd mają przechowywać nazwy np DEV01 a inne numery seryjne odczytanych przez uart urządzeń.

Przechodząc do sedna chciałbym otworzyć konkretny plik tekstowy i odczytać jego zawartość do stringa używanego w programie , próbowałem zrealizować to w ten sposób ( DATA = myFile.read(); ) ale nie działa, jeśli data jest stringiem program wyrzuca błąd podczas kompilacji, jeśli uzywam tablicy intów wówczas program kompiluje się ale wyrzuca 
?losowe? dane. 

Potrzebuję więc kawałek kodu który wchodzi w plik txt z konkretną nazwą np: DEV1 a następnie pobiera dane z konkretnej linijki w pliku i zapisuje do zmiennej globalnej (String) o nazwie DATA.

Jeśli ktoś wie jak zrealizować odczyt z pliku txt do zmiennej string w programie będę wdzięczny za pomoc, chętnie też zrozumiem jak to zrealizować jeśli ktoś ma ochotę łopatologicznie wytłumaczyć.
Do napisów w Arduino używa się tablic char, a nie "intów", albo string.
Masz problem z kodem to go pokaż.
(24-09-2023, 06:09)kaczakat napisał(a): [ -> ]Do napisów w Arduino używa się tablic char, a nie "intów", albo string.
Masz problem z kodem to go pokaż.
#include <SPI.h>
#include <SD.h>

File myFile;

String SNUM = "01092023194930542069";
String DATA = "";
int ZGD = 0;


//01092023194930542069 szukany nr seryjny

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

  Serial.println("Gotowy! (1/3)");
  Serial.println("Szukam karty... (2/3");

  if (!SD.begin(4)) 
  {
    Serial.println("Nie wykryto karty(ERR)"); 
    return;                                   
  }
  Serial.println("Karta Wykryta (3/3))"); 

}

void loop()
{

  myFile = SD.open("DEV1.txt"); 
  if(myFile)
  {
  Serial.println("Odczyt: DEV1");

  while(myFile.available())
  {
    Serial.write(myFile.read());   
    DATA = myFile.read();
  }
 
  myFile.close();
  Serial.println(" ");
  Serial.println("Odczyt: DEV1/DATA");
  Serial.println(DATA);
 
  }
  else
  {
  Serial.println("Nie można otworzyć pliku"); 
  }

  for(int i=0;i<20;i++)
  { 
  if(DATA[i] == SNUM[i])
  {
    ZGD++;
  }
  }

  if(ZGD == 20)
  {
  Serial.println("DEV1 - Numer seryjny zgodny"); 
  }

}
(24-09-2023, 13:29)W3rter napisał(a): [ -> ]
(24-09-2023, 06:09)kaczakat napisał(a): [ -> ]Do napisów w Arduino używa się tablic char, a nie "intów", albo string.
Masz problem z kodem to go pokaż.
  while(myFile.available())
  {
    Serial.write(myFile.read());   
    DATA = myFile.read();
  }
 

Tak nie można. Każde wywołanie read() zwraca kolejną daną - więc jeden znak wypisujesz serialem, a drugi podstawiasz do zmiennej. Jeśli chcesz dwie rzeczy zrobić z wczytanymi znakami to musisz zapamiętywać je w zmiennej, a nie dwa razy wołać read().

A jeśli chcesz pamiętac cały plik a nie pojedynczy znak to
DATA += myFile.read();