Czytnik kart SD SPI z Arduino
Moduł do obsługi kart SD komunikuję się przez magistralę SPI.
Karty SD powinny mieć rozmiar mniejszy niż 2GB, sformatowane do systemu plików FAT32 (lub FAT).
Istnieje kilka różnych bibliotek do obsługi kart SD, w poniższym przykładzie posłużymy się biblioteką SD.h i SPI.h
Zapisywanie i odczytywanie informacji z piku txt na karcie SD
#include <SPI.h>
#include <SD.h>
File myFile;
const char* fileName = "test5.txt";
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1)
;
}
Serial.println("initialization done.");
myFile = SD.open(fileName, FILE_WRITE);
if (myFile) {
Serial.println("Writing to file ...");
myFile.println("testing 1, 2, 3.");
myFile.close();
} else {
Serial.println("error opening file for writing");
}
myFile = SD.open(fileName);
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} else {
Serial.println("error opening file for reading");
}
}
void loop() {
}
Zapisywanie liczby kliknięć na karcie SD
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
const int btnPin = 2;
const int resetBtn = 3;
File myFile;
const char* fileName = "test10.txt";
int counter = 0;
bool btnPrevState = false;
bool btnPrevReset = false;
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
while (1)
;
}
Serial.println("initialization done.");
if(SD.exists(fileName)){
counter = load();
}
Serial.println(counter);
}
void save(int data){
myFile = SD.open(fileName, O_TRUNC | FILE_WRITE);
if (myFile) {
myFile.println(data);
myFile.close();
} else {
Serial.println("error opening file for saving");
}
}
int load(){
myFile = SD.open(fileName, O_READ);
if (myFile) {
String numberStr = "";
while (myFile.available()) {
char c = myFile.read();
if (isDigit(c)) {
numberStr += c;
}
}
myFile.close();
if (numberStr.length() > 0) {
return numberStr.toInt();
} else {
Serial.println("No valid number found in file.");
return 0;
}
} else {
Serial.println("Error opening file for reading.");
return 0;
}
}
void onClickCount() {
bool btnNowState = digitalRead(btnPin);
if (btnNowState == 1 && btnPrevState == 0) {
counter++;
save(counter);
Serial.println(counter);
}
btnPrevState = btnNowState;
}
void onClickReset() {
bool btnNowState = digitalRead(resetBtn);
if (btnNowState == 1 && btnPrevReset == 0) {
counter = 0;
save(counter);
Serial.println(counter);
}
btnPrevReset = btnNowState;
}
void loop() {
onClickCount();
onClickReset();
}