【雕爺學編程】Arduino動手做(52)---MicroSD卡讀寫模塊2

37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑑於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流爲目的,這裏準備逐一動手試試多做實驗,不管成功與否,都會記錄下來——小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

 

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊 TF卡讀寫卡器 (帶電平轉換芯片)

 

Arduino實驗接線示意圖

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:讀取SD卡記事本123456上的內容,並通過串口發送
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
  程序:讀取SD卡記事本123456上的內容,並通過串口發送
  接線:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;//定義變量myFile

void setup() {
  // 打開串口通信並等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ;// 等待串口連接, 僅使用本地 USB 端口
  }

  Serial.print("Initializing SD card...");
  // 查看卡是否存在並且可以初始化
  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    // 如卡不存在,則不要再做任何事情,初始化失敗
    return;
  }
  Serial.println("initialization done.");

  // 打開文件,請注意,一次只能打開一個文件
  // 所以你必須在打開另一個之前關閉這個
  myFile = SD.open("123456.TXT");

  // 如果文件可用,讀取SD卡記事本123456上的內容
  if (myFile) {
    Serial.println("123456.txt:");
    Serial.println("↓↓↓↓");
    while (myFile.available())
    {
      Serial.write(myFile.read());
    }
    myFile.close();
  }
  else {
    // 如果文件沒有打開,彈出一個錯誤
    Serial.println("error opening 123456.txt");
  }
}

void loop() {
}

  

實驗串口返回情況,讀取了記事本上的文字內容

Arduino實驗場景圖

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:打印出一個SD卡上的目錄
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
  程序:打印出一個SD卡上的目錄
  接線:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File root;

void setup() {
  // 打開串口通信,等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ; //等待串口連接, 僅使用本地 USB 端口
  }

  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  root = SD.open("/");

  printDirectory(root, 0);

  Serial.println("done!");
}

void loop() {
  // 設置完成後沒有任何反應。
}

void printDirectory(File dir, int numTabs) {
  while (true) {

    File entry =  dir.openNextFile();
    if (! entry) {
      // 沒有更多文件
      break;
    }
    for (uint8_t i = 0; i < numTabs; i++) {
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
      // 文件有大小,目錄沒有
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}

  實驗串口返回情況

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:從 SD 卡文件讀取和寫入數據
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
  程序:從 SD 卡文件讀取和寫入數據
  接線:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // 打開串口通信,等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ; //等待串口連接, 僅使用本地 USB 端口
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  // 打開文件,請注意,一次只能打開一個文件
  // 所以你必須在打開另一個之前關閉這個
  myFile = SD.open("123456.txt", FILE_WRITE);

  //如果文件打開正常,請寫入
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // 如果文件沒有打開,打印一個錯誤
    Serial.println("error opening 123456.txt");
  }

  // 重新打開文件進行閱讀
  myFile = SD.open("123456.txt");
  if (myFile) {
    Serial.println("123456.txt:");

    // 從文件中讀取,直到其中沒有其他內容:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // 關閉文件
    myFile.close();
  } else {
    // 如果文件沒有打開,打印一個錯誤:
    Serial.println("error opening 123456.txt");
  }
}

void loop() {
  // 設置後沒有任何反應
}

  

實驗串口返回情況,讀取記事本123456上的內容,並寫入“testing 1, 2, 3.”

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:SD卡測試,獲取有關 SD 卡的相關信息
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
  程序:SD卡測試,獲取有關 SD 卡的相關信息
  接線:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

// 導入 SD 庫
#include <SPI.h>
#include <SD.h>

// 使用 SD 實用程序庫函數設置變量
Sd2Card card;
SdVolume volume;
SdFile root;

// 更改它以匹配您的 SD 屏蔽或模塊
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;

void setup() {
  // 打開串口通信,等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ; //等待串口連接,僅使用本地 USB 端口
  }


  Serial.print("\nInitializing SD card...");

  // 我們將使用實用程序庫中的初始化代碼
  // 因爲我們只是在測試卡是否正常工作!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // 打印卡類型
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // 現在我們將嘗試打開“卷”/“分區”——它應該是 FAT16 或 FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // 打印第一個 FAT 類型卷的類型和大小
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // 集羣是塊的集合
  volumesize *= volume.clusterCount();       // 會有很多集羣
  volumesize /= 2;                           // SD 卡塊始終爲 512 字節(2 個塊爲 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // 列出卡中所有文件的日期和大小
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
}

  實驗串口返回情況

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:創建和銷燬 SD 卡文件
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
  程序:創建和銷燬 SD 卡文件
  接線:
  MicroSD       uno
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // 打開串口通信,等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ; // 等待串口連接,僅使用本地 USB 端口
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");

  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }

  // 打開一個新文件並立即關閉它
  Serial.println("Creating example.txt...");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();

  // 檢查文件是否存在
  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }

  // 刪除文件
  Serial.println("Removing example.txt...");
  SD.remove("example.txt");

  if (SD.exists("example.txt")) {
    Serial.println("example.txt exists.");
  } else {
    Serial.println("example.txt doesn't exist.");
  }
}

void loop() {
  // 設置完成後沒有任何反應
}

  實驗串口返回情況

Arduino實驗場景圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章