Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4006|回復: 22
打印 上一主題 下一主題

我想知道有無方法只讀取SD卡內任何一檔案裡面的最後一筆...

[複製鏈接]
跳轉到指定樓層
1#
發表於 2018-6-4 16:26:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想知道有無方法只讀取SD卡內任何一檔案裡面的最後一筆...
2#
發表於 2018-6-4 16:57:07 | 只看該作者
本帖最後由 超新手 於 2018-6-4 17:26 編輯

先用 size() 取得檔案的總長度,
然後用此長度減去一筆資料的長度
然後用 seek(x) 去設檔案指標
然後再讀即可
例如
File file;
file = SD.open("test.txt", FILE_READ);
unsigned long l = file.size();
// 假設你所謂的"一筆資料"是 4 BYTES
if(l >= 4) {
file.seek(l-4);
unsigned char buf[4];
file.read(buf, 4);
}
一筆資料的長度只有你知道, 不一定是我寫的 4
可別照抄

3#
 樓主| 發表於 2018-6-6 16:12:49 | 只看該作者
感謝~~我試試!再麻煩妳喔~~
4#
 樓主| 發表於 2018-6-6 16:30:27 | 只看該作者
請問資料是存哪裡?
Serial.println(file);
OR
Serial.println(buf);
5#
發表於 2018-6-6 16:51:44 | 只看該作者
Serial.println(buf[0]);
Serial.println(buf[1]);
Serial.println(buf[2]);
Serial.println(buf[3]);
你會問這個問題.....表示你還不太了解
基本上, 你要取代以下的程式
unsigned char buf[4];
file.read(buf, 4);
變成為你自己的程式, 而不是照抄
因為只有你才知道一筆資料佔多少個bytes
7#
 樓主| 發表於 2018-6-12 14:33:35 | 只看該作者
SORRY ~~我這邊測出來file.size()結果L是請問?我還須修正甚麼嗎?不好意思新手~~所以問題較多!!
8#
 樓主| 發表於 2018-6-12 14:39:55 | 只看該作者
SORRY ~~我這邊測出來file.size()結果L是0   請問?我還須修正甚麼嗎?不好意思新手~~所以問題較多!!
9#
發表於 2018-6-12 14:41:08 | 只看該作者
看不懂你說什麼?
我這邊測出來file.size()結果L是請問?
10#
 樓主| 發表於 2018-6-12 16:06:46 | 只看該作者
file.size()已經對了~~但是內容(數字)不對~~
Serial.println(buf[0]);
Serial.println(buf[1]);
Serial.println(buf[2]);
Serial.println(buf[3]);
11#
發表於 2018-6-12 16:27:11 | 只看該作者
1) 正確的值是多少? 印出來的值又是什麼?
2) 一筆資料是多少個 BYTES

不過....叫你改掉的這部份
你還是照抄
錯也是正常的




12#
 樓主| 發表於 2018-6-13 14:01:06 | 只看該作者
1) 正確的值是多少? 169 印出來的值又是什麼? 49,54,57,13,10
2) 一筆資料是多少個 BYTES ? 100000 最多;ˊ6個BYTES
13#
發表於 2018-6-13 15:15:13 | 只看該作者
本帖最後由 超新手 於 2018-6-13 15:56 編輯

從資料來看,  其實是沒錯的
49,54,57,13,10  就是 "169\r\n"
也就是
1 的 asdii code是 49
6 的 asdii code是 54
9 的 asdii code是 57
\r 的 asdii code是 13
\n 的 asdii code是 10

所以你只要改個方式列印出來即可
把 println 改成 write
  Serial.write(buf[0]);
  Serial.write(buf[1]);
  Serial.write(buf[2]);
  Serial.write(buf[3]);
  Serial.write(buf[4]);

14#
 樓主| 發表於 2018-6-14 08:21:25 | 只看該作者
請問,我能把它變成INT 或LONG 拿進ARDUINO 繼續使用嗎 ?
15#
 樓主| 發表於 2018-6-14 08:30:20 | 只看該作者
只剩下這一部即可完成 ,我想要的~~~感恩!!
16#
發表於 2018-6-14 08:32:49 | 只看該作者
本帖最後由 超新手 於 2018-6-14 10:13 編輯

int x = atoi(buf);
就可以把字串變整數
但要注意的是,
buf 必須是合法的字串(廢話?)
你提的這個例子, 剛好是字串, 所以才能用
17#
 樓主| 發表於 2018-6-14 14:14:22 | 只看該作者
謝謝您~~已經完成我想要的了!!
感恩您~~
18#
 樓主| 發表於 2018-6-19 08:37:09 | 只看該作者
抱歉~~再提問一下!! 由於 char 的極限 為32767 如果 我要用 LONG的話如何修正?
19#
發表於 2018-6-19 09:55:20 | 只看該作者
本帖最後由 超新手 於 2018-6-19 12:57 編輯

不是 char, 而是 int, int 範圍 32767 ~ - 32768
改用
long x = atol(buf);
注意!
原本是用 atoi
要改成 atol  ,
20#
 樓主| 發表於 2018-6-19 14:19:24 | 只看該作者
也就是說: 也就是說我的數字會大於10萬就是32768以上~~因此要用LONG可以嗎?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-26 05:21 , Processed in 0.316710 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表