Robofun 機器人論壇
標題:
如何用SD卡建立多個檔名有規律的.TXT檔案
[打印本頁]
作者:
thuthu94
時間:
2016-7-13 13:01
標題:
如何用SD卡建立多個檔名有規律的.TXT檔案
目前想要做多個排序名稱來命名.TXT(例如1.TXT 2.TXT 3.TXT....等)
但是用myFile = SD.open("1.txt", FILE_WRITE); 這指令
要怎麼改成可以自己新增2.TXT 3.TXT...等檔案?
作者:
超新手
時間:
2016-7-13 16:18
方法很多
char FileName[8] = "1.txt";
for(FileName[0] = '1' ;FileName[0] < '5' ; FileName[0]++) {
if (SD.open(FileName, FILE_WRITE)) {
}
}
作者:
thuthu94
時間:
2016-7-20 10:17
本帖最後由 thuthu94 於 2016-7-20 10:52 編輯
回復
2#
超新手
目前又卡關了
改了資料後變成可以創新檔案但是無法寫入資料
附上檔案
void loop()
{
char FileName[8] = "0.txt";
for(FileName[0] = '0' ;FileName[0] < '5' ; FileName[0]++) {
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);
}
}
}
作者:
超新手
時間:
2016-7-20 10:21
myFile=SD.open(FileName, FILE_WRITE);
作者:
thuthu94
時間:
2016-7-20 10:53
回復
4#
超新手
這跟 if (SD.open(FileName, FILE_WRITE)) {
的功能不一樣嗎??
作者:
超新手
時間:
2016-7-20 11:19
myFile=SD.open(FileName, FILE_WRITE)
if (myFile) {
Serial.print("Writing to ");
作者:
thuthu94
時間:
2016-7-22 13:24
回復
6#
超新手
感謝教導
另外詢問一下檔案格式問題
是只能用.TXT檔案嗎?因為想要做曲線圖表
想用Excel存取檔案
但是好像無法直接存取....
還是說有其他的檔案格式可以用?
作者:
超新手
時間:
2016-7-22 16:35
本帖最後由 超新手 於 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只是換行, 不要照著打
作者:
thuthu94
時間:
2016-8-1 09:09
回復
8#
超新手
試過用以上的方法了
是可以用了但是好像無法直接用ARDUINO去直接創個
.xls對吧?
執行後會顯示錯誤
作者:
超新手
時間:
2016-8-1 09:10
什麼錯誤?
作者:
thuthu94
時間:
2016-8-1 09:46
回復
10#
超新手
有了 抱歉!!
發現是自己搞烏龍
作者:
thuthu94
時間:
2016-8-2 10:56
另外一直用不出來在EXCEL上把資料分成兩隔(左右兩邊)
目前程式
Serial.print("value,");
myFile.print("value,");
Serial.println(sensorValue);
myFile.println(sensorValue);
一個是固定要顯示的 一個是感測器測量到的值
想要分別歸類在左右兩格
但目前不管怎樣用就是會再同一格顯示value,XXX
作者:
超新手
時間:
2016-8-2 12:20
1.jpg
(39.6 KB, 下載次數: 552)
下載附件
2016-8-2 12:13 上傳
出現此畫面時, 把逗點也打勾即可
另外, 要先開 EXCEL, 再使用開啟舊檔去開啟檔案
不要用DOUBLE CLICK 去開檔
作者:
thuthu94
時間:
2016-8-3 09:47
本帖最後由 thuthu94 於 2016-8-3 09:49 編輯
問個指令問題 char FileName[
8
] = "1.TXT";
for(FileName[0] = '1' ;
FileName[0] < '8'
; FileName[0]++) {
請問一下紅色的那個8是什麼意思
另外綠色的部分後面最多可以寫<多少?
昨天試了好幾次 感覺不能寫太多 不然檔案會砍不掉(要從新格式化才能)
作者:
超新手
時間:
2016-8-3 10:04
本帖最後由 超新手 於 2016-8-3 10:05 編輯
>>請問一下紅色的那個8是什麼意思
沒什麼, 亂寫的. 基本上只要大於6即可(也就是1.txt 5 個字加結束字元)
其實不用寫就可以了
char FileName[] = "1.TXT";
>>另外綠色的部分後面最多可以寫<多少?
'0'~'9', 'A'~'Z', 'a'~'z' 都可以, 只要合乎檔案命名規則即可
也可以用其他方法, 就可以無窮多
我只是用最簡單的方式
>>昨天試了好幾次 感覺不能寫太多 不然檔案會砍不掉(要從新格式化才能)
寫的過程中要看看有沒有成功,
可能是沒寫成功, 導致檔案格式錯誤
作者:
thuthu94
時間:
2016-8-3 10:11
for(FileName[0] = '1' ;FileName[0] < '8' ; FileName[0]++) {
那如果一上面這個指令來看
檔名達到8.TXT時
我想要砍1.TXT的檔案(好為下一次紀錄檔案 就是覆蓋過去的意思)
達到1.TXT時想砍2.TXT 為3.TXT砍4.TXT......以此類推
我該怎麼搭配這指令用SD.remove("?.txt");
作者:
thuthu94
時間:
2016-8-3 10:21
回復
16#
thuthu94
我想到可以用
switch…case來寫
但是前面判斷是寫
case '?.TXT' 來當判斷式嗎?
:
作者:
超新手
時間:
2016-8-3 10:41
>>case '?.TXT'
不行吧, CASE只能用字元, 數字
這樣就可以開 3 萬個檔了
char FileName[32];
for(int u = 0 ; u < 30000 ; u++) {
sprintf(FileName, "%d.TXT", u);
....................
}
作者:
超新手
時間:
2016-8-3 12:45
>>我該怎麼搭配這指令用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");
}
}
作者:
thuthu94
時間:
2016-8-3 14:58
回復
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;
}
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2