Lekce 14 - Arduino a SD karta - čteme data

04.04.2013 15:09

Translate to English

V minulém díle jsme si ukázali, že není vůbec složité zapsat něco na kartu SD. Nyní si ukážeme jak s SD karty číst. Zapojení necháme tak jak bylo a v mém případě použijeme znovu Ethernet Shield. 

Vzhledem k tomu, že budeme pouze číst z karty nepotřebujeme dalších součístek nýbrž pouze SD kartu. Na tuto si pro náš test nahrajeme nějaká data, které využijeme pro čtění. V mém případě jsem si vytvořil soubor text.txt, kam si např. v poznámkovém bloku napíše a uložíme do souboru nějaký text. Fantazii se v tomto případě meze klást nebudou.

Do Arduina si nahrajeme tento program:

Po nahrání programu a zapnutí Serial Monitoru se do okna vypíše náš obsah souboru text.txt. V mém případě se jedná o několik jmen zapsaných pod sebe.

Tak pokud vidíte svůj text tak jste soubor přečetli. Nyní si trošku změníme zdrojový kód pro Arduino. Dostáváme se k příkladu, kdy bude chtít zobrazit pouze vybraný řádek:

V kódu nám přibyla jedna proměná "radek" a několik podmínek. Ta první: když při čtení narazíme na znak nového řádku (v ASCII #13) tak k proměné radek přičteme číslo jedna. To nám vlasně počítá řádky. Další podmínka je, že do Serial Monitoru budeme vypisovat znaky, když bude pozice čtení na řádku 4 a zároveň se nebude jednat o nějaký řídící znak (Enter, apod. - čitelné znaky - tisknutelné mají ASCII od 33, ale to se můžete podívat někde na internetu sami, když si do vyhledavače zadáte ASCII tabulka). V mém případě se do okna Serial Monitoru zobrazí obsah 4 řádku ze souboru, kde mám napsané jméno Jana. 

Tohoto lze využít v případě, že chceme ze souboru přečíst nějakou jednu hodnotu a to poté v programu využít (různé nastavení apod.). 

Knihovna obsahuje ještě další funkce, které můžeme využít. Tady je přehled všech:

  • begin() - inicializuje kartu SD, jako proměná se může použít číslo CS pinu, např. SD.begin(4); vrací buď true nebo false - zaleží jestli se povedlo :-)
  • exists() - testuje, zda soubor, existuje, např. SD.exists("text.txt"); - opět pokud nalezne vrací true jinak false
  • mkdir() - vytvoří adresář, např. SD.mkdir("adresar1/adresar2"); - když se povede vrací true
  • open() - otevře soubor, např. SD.open("text.txt, FILE_READ); - otevře soubor text.txt pro čtení, v případě, že chceme zapisovat druhý parametr bude FILE_WRITE, funkce vrací objekt typu File, se kterým dále pracujeme.
  • remove() - odstraní soubor, př.: SD.remove("text.txt"); - odstraní soubor text.txt - vrací true pokud se povede.
  • rmdir() - odstraní adresář - stejné jako u souboru

Teď si uvedeme funkce s objektem File, který vrací funkce SD.Open():

  • available() - vrací počet bajtů, z kterých je možno ze souboru ještě číst
  • close() - zavře soubor a zajistí, aby byly všechny data zapsána fyzicky na soubor - funkce nevrací nic
  • flush() -  zajistí, aby byly všechny data zapsána fyzicky na soubor
  • peek() - přečte a vrátí jen jeden byte ze souboru, ale zustane na té samé pozici
  • position() - vrátí aktuální pozici v souboru (long)
  • print() - zapíše data do souboru
  • println() - zapíše data do souboru a skočí na nový řádek
  • seek() - přejde na danou pozici v souboru
  • size() - vrací velikost souboru v bajtech
  • read() - přečte jeden bajt ze souboru
  • write() - zapíše data do souboru a vrátí počet bajtů zapsaných dat
  • isDirectory() - testuje, zda je to soubor nebo adresář
  • openNextFile() - vrací další soubor nebo adresář
  • rewindDirectory() - vrací se na první soubor v adresáři

Vlastní podrobný popis funkcí ohledně práci s SD kartou naleznete na tomto odkazu v originále (angličtina).

Zpět

Diskusní téma: Lekce 14 - Arduino a SD karta - čteme data

Datum
Vložil
Titulek

Arduino + ethernet shield s microSD + RFID RC522

Ahoj, potřeboval bych poradit se zapojením těchto tří modulů najednou. Když dám ethernet shield s micro SD do Arduino Uno, tak mi perfektně funguje SD karta...čte...zapisuje, vše v pohodě. Pokud vypojím ethernet a zapojím RFID čtečku, tak taky bezproblémově funguje. Když ale zapojím vše, tak jeden shield nefunguje. Chtěl bych si vytvořit elektronický zámek, který po přiložení karty(tagu) přečte číslo karty, ověří její platnost podle jejího ID. ID karet s poveleným vstupem budou uloženy na SD kartě a podle toho, zda je ID karty v seznamu přístupu, tak otevře dveře. Piny 10-13 (SS,MOSI,MISO,SCK) jsou obsazeny ethernetem a když tam zapojím RFID RC522, tak to je jasný, že to nefunguje. Jak bych tedy měl tyto shieldy zapojit. Případně mám ještě i NFC PN532 shield. Mohu zdokumentovat i fotograficky, kdyby to nebylo jasné z tohoto popisu. Jsem naprostý Arduino amatér. Bavím se tím asi 5 dnů. Děkuju předem za rady.

Datum
Vložil
Titulek

Re: Arduino + ethernet shield s microSD + RFID RC522

Leda zapoj ten NFC modul na I2C arduino uno to má na pinech A4, A5 (SDA,SCL) Je tu o této sběrnici i článek tka si to přečti ;) určitě ti to takto půjde ;) sám mám ethernet modul s GSM modulem zapojený takto a + chci ještě tern NFC k tomu dodat ;)

Datum
Vložil
Titulek

obrázok

Dá sa aj obrázok (bmp, či jpg) načítať z karty a následne zobraziť na stránke ?

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.