資料介紹
描述
介紹
在某些系統上,例如 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卡資料 7次下載
- 28335實用版SD卡文件系統實驗 0次下載
- 基于SD卡的FATFS文件系統的研究與應用_崔鵬偉 40次下載
- 51單片機與SD卡接口設計
- SD卡要點說明 265次下載
- SD卡分類簡介
- SD卡命令解釋
- sd卡-mmc卡-CPU說明資料
- 基于SD卡的駕駛行為再現存儲系統設計
- sd卡量產工具,下載
- 貼片式SD卡功能介紹【MK SD NAND】 386次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 3858次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區別 2015次閱讀
- SD卡的分類以及常見屬性 3686次閱讀
- TF卡和SD卡的區別有哪些? 8253次閱讀
- 怎么通過FPGA采取SD模式實現Micro SD卡的驅動 1693次閱讀
- 如何移植FatFs文件系統到SD卡內 1375次閱讀
- SD/micro SD存儲卡介紹 1577次閱讀
- fireflyROC-RK3328燒寫SD卡介紹 3255次閱讀
- 干貨 | SD卡/TF卡的PCB布局布線設計要求 2.5w次閱讀
- 基于μC/OS-II的SD卡文件系統的設計與實現 1369次閱讀
- spi讀取sd卡數據例程 8823次閱讀
- 單片機讀取sd卡數據_51單片機讀寫SD卡程序詳解 2.3w次閱讀
- 基于DSP和SD卡的生理信號數據采集系統設計 3558次閱讀
- mmc卡和sd卡的區別是什么 4.7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多