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

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

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

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

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

在所有這些過程之后,系統(tǒng)回到循環(huán)的開始并再次啟動所有邏輯。
此后,我們將介紹和討論為解決該問題而開發(fā)的代碼。
編程邏輯
根據下面的代碼,插入了所用元素的庫: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 循環(huán)函數。可以看到,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 循環(huán)來驗證SD 卡。在此過程中,系統(tǒng)會對 SD 卡進行初始化。如果初始化過程正常發(fā)生,那么SD卡就沒有問題了。但是,如果出現任何問題,系統(tǒng)將初始化SD 卡。
這種方式將在顯示 LCD中顯示“失敗或卡斷開”消息,并且變量 SDCardTest 將接收值 0。該變量將用于控制循環(huán)執(zhí)行。
解決問題并重新連接SD卡后,將顯示消息“按下按鈕存儲數據”。
在此之后,將執(zhí)行 void 循環(huán)函數中的命令。void 循環(huán)函數的代碼如下所示。
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 循環(huán)函數中,將讀取按鈕的狀態(tài)以驗證我們的用戶是否按下了按鈕。在要讀取的按鈕之后,有以下情況:
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”消息,通知該過程完成。
最后,文件將被關閉。因此,系統(tǒng)將多次驗證SD 卡。
致謝
感謝PCBWay支持我們的 YouTube 頻道并生產和組裝質量更好的 PCB。
Silícios 實驗室感謝UTSOURCE提供電子元件。
- SD卡2.0協(xié)議資料英文版 0次下載
- 基于SPI協(xié)議的SD卡讀寫說明 49次下載
- SD卡的99SE封裝庫免費下載 43次下載
- SD卡的99SE封裝庫免費下載 13次下載
- 使用單片機實現SD卡讀寫的資料和程序免費下載
- SD卡資料 8次下載
- 28335實用版SD卡文件系統(tǒng)實驗 0次下載
- 基于SD卡的FATFS文件系統(tǒng)的研究與應用_崔鵬偉 40次下載
- 51單片機與SD卡接口設計
- SD卡要點說明 266次下載
- SD卡分類簡介
- SD卡命令解釋
- sd卡-mmc卡-CPU說明資料
- 基于SD卡的駕駛行為再現存儲系統(tǒng)設計
- sd卡量產工具,下載
- 貼片式SD卡功能介紹【MK SD NAND】 851次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區(qū)別 5589次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區(qū)別 5769次閱讀
- SD卡的分類以及常見屬性 6273次閱讀
- TF卡和SD卡的區(qū)別有哪些? 1w次閱讀
- 怎么通過FPGA采取SD模式實現Micro SD卡的驅動 2323次閱讀
- 如何移植FatFs文件系統(tǒng)到SD卡內 1889次閱讀
- SD/micro SD存儲卡介紹 1915次閱讀
- fireflyROC-RK3328燒寫SD卡介紹 3515次閱讀
- 干貨 | SD卡/TF卡的PCB布局布線設計要求 2.5w次閱讀
- 基于μC/OS-II的SD卡文件系統(tǒng)的設計與實現 1480次閱讀
- spi讀取sd卡數據例程 9063次閱讀
- 單片機讀取sd卡數據_51單片機讀寫SD卡程序詳解 2.3w次閱讀
- 基于DSP和SD卡的生理信號數據采集系統(tǒng)設計 3729次閱讀
- mmc卡和sd卡的區(qū)別是什么 4.7w次閱讀
下載排行
本周
- 1DD3118電路圖紙資料
- 0.08 MB | 1次下載 | 免費
- 2AD庫封裝庫安裝教程
- 0.49 MB | 1次下載 | 免費
- 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
- 1.12 MB | 1次下載 | 免費
- 4網絡安全從業(yè)者入門指南
- 2.91 MB | 1次下載 | 免費
- 5DS-CS3A P00-CN-V3
- 618.05 KB | 1次下載 | 免費
- 6海川SM5701規(guī)格書
- 1.48 MB | 次下載 | 免費
- 7H20PR5電磁爐IGBT功率管規(guī)格書
- 1.68 MB | 次下載 | 1 積分
- 8IP防護等級說明
- 0.08 MB | 次下載 | 免費
本月
- 1貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 103次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 3錦銳科技CA51F2 SDK開發(fā)包
- 24.06 MB | 43次下載 | 1 積分
- 4錦銳CA51F005 SDK開發(fā)包
- 19.47 MB | 19次下載 | 1 積分
- 5PCB的EMC設計指南
- 2.47 MB | 16次下載 | 1 積分
- 6HC05藍牙原理圖加PCB
- 15.76 MB | 13次下載 | 1 積分
- 7802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費
- 8蘋果iphone 11電路原理圖
- 4.98 MB | 6次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191390次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評論