Micro SD card read/write modul
Za izuzetno malu sumu ($0,47) se može nabaviti čitač mikro SD kartica iz
naslova koji se vrlo lako može povezati na Arduino i koristiti u razne
svrhe. Modul je u stanju da čita i piše po mikro SD kartici putem SPI
interfejsa. Izuzetno je malih dimenzija 42x24x12mm i težak jedva 5
grama.
Na PCB-u nema nikakva oznaka a preturajući po Aliekspresu
ni kod drugih trgovaca nema nikakvih oznaka za isti model. Prema
specifikaciji kod trgovca kod koga sam ja uzeo modul stoji da ima
podršku za MicroSD i MicroSDHC kartice kapaciteta od 2GB do 32gb.
Povezuje se na 5V a gde je napon od 0,2mA u stanju mirovanja do 200mA
pri maksimalnom opterećenju. 80mA je najčešća vrednost koju će modul
postići, tj. opteretiti izlaze Arduina. S obzirom da SD kartice rade na
3,3V na ploči su 3,3V naponski regulator i Level Conversion IC.
Nasuprot slotu za mikro SD karticu su 6 pinova u L konfiguraciji: GND, VCC, MISO, MOSI, SCK i CS.
Pinovi se povezuju na sledeći način:
GND -> GND
VCC -> 5V
MISO -> MISO
MOSI -> MOSI
SCK -> SCK
CS -> digitalni pin 10
Ja
sam za potrebe ovog teksta koristio Megu a treba znati gde su SPI
hederi u zavisnosti koja će se ploča koristiti. Na Megi su SPI hederi na
sledećim pinovima:
50 -> MISO
51 -> MOSI
52 -> SCK
Na
drugim pločama su hederi na drugim pinovima i treba obratiti pažnju. CS
sam povezao na digitalni pin 10 ali može i na neki drugi. Ja u principu
stalno koristim pin 10 iz prostog razloga jer je na većem brojem
šildova koji imaju SD slot CS povezan na njega. Na taj način se lako
mogu praviti snipeti i koristiti u raznim projektima bez bojazni da li
će na drugim SD modulima raditi.
Za projekat koji sledi je potrebno:
MEGA
Micro SD modul
Micro SD kartica
breadboard
3 otpornika od 10K
3 tactile prekidača
brdo dupont žica
Sve povezujemo prema Fritzing šemi ispod.
------------------------
#include <SD.h>
#include <SPI.h>
const int SD_CS = 10;
const int buttonPin = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
int buttonState = 0;
int buttonState2 = 0;
int buttonState3 = 0;
File dataFile;
void setup() {
Serial.begin(9600);
SD.begin(SD_CS);
pinMode(buttonPin, INPUT);
dataFile= SD.open("test.txt",FILE_WRITE);
if(dataFile){
Serial.println("Fajl text.txt je napravljen.");
dataFile.close();
}else{
Serial.println("Fajl text.txt nije napravljen.");
}
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
buttonState2= digitalRead(buttonPin2);
buttonState3= digitalRead(buttonPin3);
if (buttonState == HIGH) {
dataFile = SD.open ("test.txt",FILE_WRITE);
if(dataFile){
dataFile.println("Upravo smo prekidacem uneli ovaj tekst.");
delay(200);
dataFile.close();
Serial.println("Uspešno unet tekst u test.txt");
delay(100);
}else{
Serial.println("Nema test.txt fajla");
}
}
if (buttonState2 == HIGH){
dataFile = SD.open("test.txt");
if (dataFile) {
while (dataFile.available()) {
Serial.write(dataFile.read());
}
Serial.println();
Serial.println("........");
Serial.println("Izlistan sadržaj mikro SD kartice");
dataFile.close();
} else {
Serial.println("Greska u otvaranju test.txt");
}
}
if(buttonState3 == HIGH){
SD.remove("test.txt");
if(SD.exists("test.txt")){
Serial.println("Test.txt nije obrisan");
}else{
Serial.println("Fajl je obrisan");
}
}
delay(200);
}
-----------------------------
Prvo se naravno dodaju neophodne biblioteke, u ovom slučaju SPI i SD. Zatim
dodeljujemo funkcije pinovima i dodeljujemo logičku 0 promenljivima koje
će nam trebati za prekidače. U setup funkciji nakon pokretanja serial
monitora i sd slota otvaramo karticu i pravimo test.txt fajl a zatim
slot zatvaramo. Ukoliko kartice nema to prikazujemo na serial monitoru.
U
loop funkciji čekamo stanje nekog od tri prekidača. Ako je pritisnut
prvi prekidač i dobijemo logičku jedinicu, u već kreiran fajl (koji ako
nije kreiran biće ovom prilikom) unosimo prikladan tekst. Ukoliko je
pritisnut drugi prekidač otvaramo sd slot i izlistavamo sadržaj na
serial monitoru. Ukoliko fajla nema dobijamo obaveštenje o tome. Kada je
treći prekidač pritisnut brišemo test.txt i sve u njemu i ispisujemo na
serial monitoru šta smo uradili. Ukoliko idemo ovim redom dobićemo
ispis kao na slici a ukoliko nakon brisanja pritisnemo drugi prekidač da
izlistamo sadržaj, dobićemo poruku da fajla nema. Možemo ponovo
pritisnuti prvi taster koji će ispisati tekst i uz put prethodno
napraviti test.txt.
Vrlo
zanimljiv modul prikladan da se koristi u razne svrhe ukoliko se ne
koristi neki šild koji ga već ima. Osim ovakvog načina upisa moguće ga
je koristiti i za data logging ili slično. Na kartici se može držati
više fajlova ali se može u jednom trenutku otvoriti samo jedan i nakon
toga zatvoriti ako terba da se otvori drugi. Isto tako ovaj primer će
obrisati samo selektovani fajl a druge će ostaviti na kartici.
Zaboravih skeč. Ispravljeno.