|

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

czytnik kart sd z Arduino
czytnik kart sd z Arduino

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

Czytnik kart sd z Arduino z przyciskami chwilowymi
Czytnik kart sd z Arduino z przyciskami chwilowymi
#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();
}

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *