[Źródło: https://botland.com.pl/akcesoria-do-kart-pamieci/1507-modul-czytnika-kart-sd-5903351241342.html]
Wstęp
Wykorzystywanie karty SD ma wiele zastosowań pozwalających na zapisywanie i prowadzenie rejestru odczytanych danych. Często taki sposób akwizycji danych stosowany jest w projektach zawierających min. takie elementy jak:
- moduł GPS, do zbierania danych o położeniu;
- stacji pogodowej, do zapisywania danych odnośnie temperatury, ciśnienia, opadów itp.
- systemach pomiarowych, zbierających dane odnośnie odległości, odchyleń itp.
Zapis danych na kartę SD można dokonać poprzez zastosowanie biblioteki wbudowanej SD.h oraz odpowiedniej bibliotece do komunikacji z modułem. W moim przypadku będzie to SPI.h.
Oprogramowanie Arduino IDE ma wiele przykładów min. dla karty SD,
Podczas wykorzystywania karty SD należy pamiętać aby była ona sformatowana w formacie FAT32.
Podłączenie
Układ podłączany jest do następujących wyprowadzeń:
- MOSI - pin 11
- MISO - pin 12
- CLK - pin 13
- CS - pin 10
Programowanie
W celu poprawnej inicjalizacji karty SD należy w programie wprowadzić następujące komendy. Instrukcja warunkowa if sprawdza czy karta jest wykrywana. Jeśli nie jest to następuje wyświetlenie informacji poprzez port szeregowy i przerwanie wykonywania programu. Jeśli karta zostanie rozpoznana program nie wejdzie do instrukcji i wyświetli napis o błędnej inicjalizacji karty.
- if(!SD.begin(CSPin))
- {
- Serial.println("Blad inicjalizacji karty");
- return;
- }
- Serial.println("Karta zostala poprawnie zainicjalizowana");
- myFile = SD.open("test.txt", FILE_WRITE);
- //Sprawdza czy plik otwarty
- if (myFile){
- Serial.print("Wpisanie tekstu");
- myFile.println("123 Dziala");
- //Zamkniecie pliku
- myFile.close();
- }
- else {
- //Jeśli plik się nie otworzył
- Serial.println("Blad otwarcia pliku");
- }
SD.open otwiera plik o podanej nazwie, lub tworzy go jeśli nie istnieje. Jeśli plik zostanie stworzony lub/i otwarty wtedy program wejdzie do instrukcji warunkowej if gdzie nastąpi wpisanie podanej składki do pliku. Natomiast w przypadku zwrócenia wartości false wykonana zostanie instrukcja else.
Plik po otwarciu musi zostać zamknięty inaczej dane nie zostaną poprawnie wprowadzone.
- //Biblioteki
- #include <SD.h>
- #include <SPI.h>
- const int CSPin = 10;
- int czas = 0;
- void setup(){
- Serial.begin(9600);
- //Ustawienie CS jako wyjście
- pinMode(CSPin, OUTPUT);
- if (!SD.begin(CSPin))
- {
- Serial.println("Blad inicjalizacji karty");
- return;
- }
- Serial.println("Karta zostala poprawnie zainicjalizowana");
- }
- void loop(){
- File myFile = SD.open("test.txt", FILE_WRITE);
- if (myFile){
- myFile.print("Dziala ");
- myFile.println(czas);
- myFile.close();
- Serial.print("Dane zapisane");
- }
- else{
- Serial.println("Blad otwarcia pliku");
- }
- delay(3000);
- }