資料介紹
描述
介紹
在某些系統上,例如 3D 打印機,存儲卡用于保存打印文件。因此,在打印開始和打印過程中檢查存儲卡連接非常重要。
因此,在任何連接或卡故障的情況下,系統必須能夠檢測到故障并在系統LCD 屏幕上通知用戶。
除了 3D 打印機,這種方法還可以用于任何使用存儲卡的系統或設備。
因此,我們提出了一個電路來測試解決方案,如圖 1 所示。
接下來,我們將創建并解釋一種算法,用于在系統執行過程中檢測存儲卡的故障或未連接。

項目發展
構建代碼的邏輯非常簡單。我們需要在開始(void setup 函數)和代碼執行期間(循環函數內部)檢查卡是否已連接。
如果未檢測到卡,則必須在LCD屏幕上輸入一條消息以通知用戶,如圖 2 所示。

這樣,用戶將卡片插入,系統將再次重新運行,并顯示“卡片已連接!”的消息,如圖 3 所示。

系統驗證SD卡狀態后,系統將等待用戶按下按鈕,開始對10個ADC值在SD卡中的存儲處理。此時,它將顯示如圖 4 所示的消息。

用戶按下按鈕后,系統會在SD 卡中存儲 10 個單位的 ADC 值,并在屏幕上顯示信息:“正在存儲數據...”和“成功完成”,通知存儲過程結束。這些消息如下所示。

在所有這些過程之后,系統回到循環的開始并再次啟動所有邏輯。
此后,我們將介紹和討論為解決該問題而開發的代碼。
編程邏輯
根據下面的代碼,插入了所用元素的庫:LCD 顯示器、SD 卡并聲明了代碼的所有變量。
#include <SD.h>
#include <SPI.h>
#include <LiquidCrystal.h>
File myFile;
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define AnalogPin A0
int pinoSS = 10; // Pin 53 para Mega / Pin 10 para UNO
int DigitalValue = 0;
byte samples = 0;
bool SDCardTest = 0, ControlState = 0, LCDControl = 0;
在這個代碼塊之后,我們將在下面展示 void 循環函數。可以看到,Display LCD和 Serial 已初始化。之后,進行了第一次測試以驗證我們的SD 卡是否已連接或失敗。
void setup()
{
Serial.begin(9600); // Define BaundRate
lcd.begin(16, 2);
pinMode(pinoSS, OUTPUT); // Declara pinoSS como saída
delay(500);
lcd.clear();
do
{
if (SD.begin())
{ // Inicializa o SD Card
lcd.setCursor(6,0);
lcd.print("Card");
lcd.setCursor(3,1);
lcd.print("Connected!");
delay(2000);
SDCardTest = 1;
}
else
{
lcd.clear();
Serial.println("imprimindo segunda mensagem de erro.");
lcd.setCursor(1,0);
lcd.print("Failed or Card");
lcd.setCursor(2,1);
lcd.print("disconnected");
SDCardTest = 0;
}
}while(SDCardTest == 0);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Press the button");
lcd.setCursor(1,1);
lcd.print("To store data");
}
有一個 do-while 循環來驗證SD 卡。在此過程中,系統會對 SD 卡進行初始化。如果初始化過程正常發生,那么SD卡就沒有問題了。但是,如果出現任何問題,系統將初始化SD 卡。
這種方式將在顯示 LCD中顯示“失敗或卡斷開”消息,并且變量 SDCardTest 將接收值 0。該變量將用于控制循環執行。
解決問題并重新連接SD卡后,將顯示消息“按下按鈕存儲數據”。
在此之后,將執行 void 循環函數中的命令。void 循環函數的代碼如下所示。
void loop()
{
bool Button = digitalRead(8);
if(LCDControl == 0)
{
lcd.setCursor(0,0);
lcd.print("Press the button");
lcd.setCursor(1,1);
lcd.print("To store data");
LCDControl = 1;
}
if(Button == 0 && ControlState == 1)
{
ControlState = 0;
}
if(Button == 1 && ControlState == 0)
{
myFile = SD.open("silicioslab.txt", FILE_WRITE); // Create/Open File the txt
delay(500);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Storing");
lcd.setCursor(4,1);
lcd.print("data...");
do
{
DigitalValue = analogRead(AnalogPin);
myFile.println(DigitalValue);
delay(400);
samples++;
}while(samples < 10);
samples = 0;
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Finished");
lcd.setCursor(2,1);
lcd.print("Successfully");
delay(2000);
myFile.close(); //Close file
LCDControl = 0;
ControlState = 0;
}
do
{
if (SD.begin())
{
SDCardTest = 1;
}
else
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Failed or Card");
lcd.setCursor(2,1);
lcd.print("disconnected");
SDCardTest = 0;
LCDControl = 0;
Serial.println("Verificando problema...");
}
}while(SDCardTest == 0);
}
在 void 循環函數中,將讀取按鈕的狀態以驗證我們的用戶是否按下了按鈕。在要讀取的按鈕之后,有以下情況:
if(LCDControl == 0)
{
lcd.setCursor(0,0);
lcd.print("Press the button");
lcd.setCursor(1,1);
lcd.print("To store data");
LCDControl = 1;
}
此條件用于允許“按下按鈕存儲數據”消息僅顯示一次。這可以防止文本多次顯示,并可能在屏幕上產生奇怪的效果。
之后,如果按下按鈕,文件將打開,10 個值將保存在SD 卡中,隨后出現“Finishing Successfully”消息,通知該過程完成。
最后,文件將被關閉。因此,系統將多次驗證SD 卡。
致謝
感謝PCBWay支持我們的 YouTube 頻道并生產和組裝質量更好的 PCB。
Silícios 實驗室感謝UTSOURCE提供電子元件。
- SD卡2.0協議資料英文版 0次下載
- 基于SPI協議的SD卡讀寫說明 49次下載
- SD卡的99SE封裝庫免費下載 43次下載
- SD卡的99SE封裝庫免費下載 13次下載
- 使用單片機實現SD卡讀寫的資料和程序免費下載
- SD卡資料 8次下載
- 28335實用版SD卡文件系統實驗 0次下載
- 基于SD卡的FATFS文件系統的研究與應用_崔鵬偉 40次下載
- 51單片機與SD卡接口設計
- SD卡要點說明 266次下載
- SD卡分類簡介
- SD卡命令解釋
- sd卡-mmc卡-CPU說明資料
- 基于SD卡的駕駛行為再現存儲系統設計
- sd卡量產工具,下載
- 貼片式SD卡功能介紹【MK SD NAND】 851次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 5589次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 5769次閱讀
- SD卡的分類以及常見屬性 6273次閱讀
- TF卡和SD卡的區別有哪些? 1w次閱讀
- 怎么通過FPGA采取SD模式實現Micro SD卡的驅動 2323次閱讀
- 如何移植FatFs文件系統到SD卡內 1889次閱讀
- SD/micro SD存儲卡介紹 1915次閱讀
- fireflyROC-RK3328燒寫SD卡介紹 3515次閱讀
- 干貨 | SD卡/TF卡的PCB布局布線設計要求 2.5w次閱讀
- 基于μC/OS-II的SD卡文件系統的設計與實現 1480次閱讀
- spi讀取sd卡數據例程 9063次閱讀
- 單片機讀取sd卡數據_51單片機讀寫SD卡程序詳解 2.3w次閱讀
- 基于DSP和SD卡的生理信號數據采集系統設計 3729次閱讀
- mmc卡和sd卡的區別是什么 4.7w次閱讀
下載排行
本周
- 1蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 2長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 3AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 4長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
- 5TP4055 500mA線性鋰離子電池充電器中文手冊
- 0.75 MB | 9次下載 | 免費
- 6TP4054 400mA線性鋰離子電池充電器中文手冊
- 0.70 MB | 2次下載 | 免費
- 7TP4057X 500mA線性鋰離子電池充電器中文手冊
- 0.74 MB | 2次下載 | 免費
- 8AI智能眼鏡產業鏈分析
- 4.43 MB | 2次下載 | 免費
本月
- 1蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 2人形機器人電機驅動和傳感報告
- 4.27 MB | 169次下載 | 免費
- 3長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 4U盤一鍵制作
- 23.84 MB | 41次下載 | 免費
- 5AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 6Altium Designer元件庫
- 17.11 MB | 23次下載 | 免費
- 7長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
- 8TP4055 500mA線性鋰離子電池充電器中文手冊
- 0.75 MB | 9次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81586次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論