Dziś łączymy moduł karty SD z Arduino. Inicjujemy, zapisujemy i odczytujemy plik tekstowy na pustej karcie SD. Moja karta ma 1 GB pamięci i została sformatowana do FAT32.
Uwaga! W sklepie Bootland zauważyłem ostrzeżenia, że łącząc moduł z Arduino (Uno) trzeba zastosować konwerter napięć. Podobno można spalić kartę. Zaryzykowałem, nic się nie spaliło (jak dotąd). Może jest podobnie jak z wyświetlaczem Nokii, kto nie wie temu działa na 5V.;)
Czytnik kupiłem w sklepie Hipros.
Polecam znakomity tutorial ze strony „Henry’s Bench”. Kody poniżej pochodzą właśnie stamtąd.
Schemat połączeń modułu z Arduino Uno:
GND-GND
MISO-D12
SCK-D13
MOSI-D11
CS-D10
5V-5V
Kod1:
//Henry's Bench // LC Studio SD Card Initializing Tutorial //Connections: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 10 #include <SD.h> #include <SPI.h> int cs = 10; // Set Chip Select to pin ten void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { } Serial.println("Initializing SD card..."); Serial.println(); pinMode(cs, OUTPUT); // Documentation says you're supposed to do this // even if you don't use it: pinMode(SS, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(cs)) { Serial.println("SD did not initiliaze"); while (1) ; } Serial.println("SD initialized."); } void loop() { }
Kod2:
//Henry's Bench // LC Studio SD Card Create and Write to File Tutorial //Connections: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 10 #include <SD.h> #include <SPI.h> int cs = 10; // Set Chip Select to pin ten File myFile; // a File Object void setup() { // char myFileName[] = "MyFile.txt"; // The name of the file we will create // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { } Serial.println("Initializing SD card..."); Serial.println(); pinMode(cs, OUTPUT); // Documentation says you're supposed to do this // even if you don't use it: pinMode(SS, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(cs)) { Serial.println("SD did not initiliaze"); while (1) ; } Serial.println("SD initialized."); // Lets check to make sure that the SD card doesn't already have our file if (! SD.exists(myFileName)){ // This next statement will open a file for writing if it exists // If it does not exist, it will create that file. That's what we're doing here. myFile = SD.open(myFileName, FILE_WRITE); // This next statement checks to see if the file myFile.println("My 1st Line of Data"); // Send Your First Line to that file myFile.flush(); // Save it. } else{ // We got here because the file already exists. // Therefore we're simple opening the file and writing to it. We will add another line at the end. myFile = SD.open(myFileName, FILE_WRITE); myFile.println("Another Line of Data"); // Send Your First Line to that file myFile.flush(); } Serial.println("Done Writing"); } void loop() { }
Kod3:
//Henry's Bench // LC Studio SD Card Read From File Tutorial //Connections: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 10 #include <SD.h> #include <SPI.h> int cs = 10; // Set Chip Select to pin ten File myFile; // a File Object void setup() { // char myFileName[] = "MyFile.txt"; // The name of the file we will create String LineString = ""; // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { } Serial.println("Initializing SD card..."); Serial.println(); pinMode(cs, OUTPUT); // Documentation says you're supposed to do this // even if you don't use it: pinMode(SS, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(cs)) { Serial.println("SD did not initiliaze"); while (1) ; } Serial.println("SD initialized."); Serial.println(); Serial.println("Reading MyFile.txt..."); Serial.println(); // Open our File for Reading myFile = SD.open(myFileName, FILE_READ); // Keep Reading String until there are no more while (myFile.available() != 0) { // read the string until we have a newline // Careful on using this where you don't have newlines. LineString = myFile.readStringUntil('\n'); Serial.println(LineString); } myFile.close(); Serial.println(); Serial.println("Done"); } void loop() { }