如何用SD卡建立多個檔名有規律的.TXT檔案
目前想要做多個排序名稱來命名.TXT(例如1.TXT 2.TXT 3.TXT....等)但是用myFile = SD.open("1.txt", FILE_WRITE); 這指令
要怎麼改成可以自己新增2.TXT 3.TXT...等檔案? 方法很多
char FileName = "1.txt";
for(FileName = '1' ;FileName < '5' ; FileName++) {
if (SD.open(FileName, FILE_WRITE)) {
}
} 本帖最後由 thuthu94 於 2016-7-20 10:52 編輯
回復 2# 超新手
目前又卡關了
改了資料後變成可以創新檔案但是無法寫入資料
附上檔案
void loop()
{
char FileName = "0.txt";
for(FileName = '0' ;FileName < '5' ; FileName++) {
if (SD.open(FileName, FILE_WRITE)) {
Serial.print("Writing to ");
Serial.println(FileName);
for (int i=0; i <= 10; i++){
sensorValue = analogRead(analogInPin);
myFile.println(sensorValue);
Serial.println(sensorValue);
delay(300);
}
myFile.close();
Serial.println("done.");
}
else {
Serial.print("error opening ");
Serial.println(FileName);
}
}
} myFile=SD.open(FileName, FILE_WRITE); 回復 4# 超新手
這跟 if (SD.open(FileName, FILE_WRITE)) {
的功能不一樣嗎?? myFile=SD.open(FileName, FILE_WRITE)
if (myFile) {
Serial.print("Writing to "); 回復 6# 超新手
感謝教導
另外詢問一下檔案格式問題
是只能用.TXT檔案嗎?因為想要做曲線圖表
想用Excel存取檔案
但是好像無法直接存取....
還是說有其他的檔案格式可以用? 本帖最後由 超新手 於 2016-7-22 16:36 編輯
把副檔名 .txt 改成 .xls , excel 就可以讀了
如果資料只有一行, 就直接存
123\r\n
124\r\n
如果資料有n行, 中間就要分隔符號( tab, 逗點, 空白皆可)
123,234,123\r\n
124,235,23\r\n
自己先用記事本來練習
先寫個小文件後, 把副檔名改成 XLS
然後用 EXCEL 開
當然 EXCEL 初步會看不懂, 但它會問你一大堆問題
見招拆招, 就可以成功開啟該 .XLS(.TXT)
註:\r\n只是換行, 不要照著打 回復 8# 超新手
試過用以上的方法了
是可以用了但是好像無法直接用ARDUINO去直接創個
.xls對吧?
執行後會顯示錯誤 什麼錯誤? 回復 10# 超新手
有了 抱歉!!
發現是自己搞烏龍 另外一直用不出來在EXCEL上把資料分成兩隔(左右兩邊)
目前程式
Serial.print("value,");
myFile.print("value,");
Serial.println(sensorValue);
myFile.println(sensorValue);
一個是固定要顯示的 一個是感測器測量到的值
想要分別歸類在左右兩格
但目前不管怎樣用就是會再同一格顯示value,XXX
出現此畫面時, 把逗點也打勾即可
另外, 要先開 EXCEL, 再使用開啟舊檔去開啟檔案
不要用DOUBLE CLICK 去開檔 本帖最後由 thuthu94 於 2016-8-3 09:49 編輯
問個指令問題char FileName[8] = "1.TXT";
for(FileName = '1' ;FileName < '8' ; FileName++) {
請問一下紅色的那個8是什麼意思
另外綠色的部分後面最多可以寫<多少?
昨天試了好幾次 感覺不能寫太多 不然檔案會砍不掉(要從新格式化才能) 本帖最後由 超新手 於 2016-8-3 10:05 編輯
>>請問一下紅色的那個8是什麼意思
沒什麼, 亂寫的. 基本上只要大於6即可(也就是1.txt 5 個字加結束字元)
其實不用寫就可以了
char FileName[] = "1.TXT";
>>另外綠色的部分後面最多可以寫<多少?
'0'~'9', 'A'~'Z', 'a'~'z' 都可以, 只要合乎檔案命名規則即可
也可以用其他方法, 就可以無窮多
我只是用最簡單的方式
>>昨天試了好幾次 感覺不能寫太多 不然檔案會砍不掉(要從新格式化才能)
寫的過程中要看看有沒有成功,
可能是沒寫成功, 導致檔案格式錯誤 for(FileName = '1' ;FileName < '8' ; FileName++) {
那如果一上面這個指令來看
檔名達到8.TXT時
我想要砍1.TXT的檔案(好為下一次紀錄檔案 就是覆蓋過去的意思)
達到1.TXT時想砍2.TXT為3.TXT砍4.TXT......以此類推
我該怎麼搭配這指令用SD.remove("?.txt"); 回復 16# thuthu94
我想到可以用 switch…case來寫
但是前面判斷是寫case '?.TXT' 來當判斷式嗎?: >>case '?.TXT'
不行吧, CASE只能用字元, 數字
這樣就可以開 3 萬個檔了
char FileName;
for(int u = 0 ; u < 30000 ; u++) {
sprintf(FileName, "%d.TXT", u);
....................
} >>我該怎麼搭配這指令用SD.remove("?.txt");
只要用一個變數切換, 兩個檔互切
unsigned char Toggle;
while(1) {
if(Toggle) {
Toggle = 0;
SD.open("1.txt", FILE_WRITE);
SD.close();
SD.remove("2.txt");
}
else {
Toggle = 1;
SD.open("2.txt", FILE_WRITE);
SD.close();
SD.remove("1.txt");
}
} 回復 19# 超新手
感謝!!這樣就可以做些大筆的簡單數據紀錄
另外case目前解決的方法是用
在void setup()內先設定X=1
在void loop()內的書寫資料底下加入
switch(x) //把舊資料刪除 {
case 1:
Serial.println("Removing 4.TXT....");
SD.remove("4.TXT");
break;
case 2:
Serial.println("Removing 5.TXT...");
SD.remove("5.TXT");
break;
case 3:
Serial.println("Removing 6.TXT...");
SD.remove("6.TXT");
break;
......................
......................
default:
;
}
x ++;
if (x > 7) \\迴圈
{
x = 1;
}
頁:
[1]