Robofun 機器人論壇

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

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

[複製鏈接]
1#
發表於 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
可別照抄

2#
發表於 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
3#
發表於 2018-6-12 14:41:08 | 顯示全部樓層
看不懂你說什麼?
我這邊測出來file.size()結果L是請問?
4#
發表於 2018-6-12 16:27:11 | 顯示全部樓層
1) 正確的值是多少? 印出來的值又是什麼?
2) 一筆資料是多少個 BYTES

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




5#
發表於 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]);

6#
發表於 2018-6-14 08:32:49 | 顯示全部樓層
本帖最後由 超新手 於 2018-6-14 10:13 編輯

int x = atoi(buf);
就可以把字串變整數
但要注意的是,
buf 必須是合法的字串(廢話?)
你提的這個例子, 剛好是字串, 所以才能用
7#
發表於 2018-6-19 09:55:20 | 顯示全部樓層
本帖最後由 超新手 於 2018-6-19 12:57 編輯

不是 char, 而是 int, int 範圍 32767 ~ - 32768
改用
long x = atol(buf);
注意!
原本是用 atoi
要改成 atol  ,
8#
發表於 2018-6-19 14:51:57 | 顯示全部樓層
本帖最後由 超新手 於 2018-6-19 15:12 編輯

不行!
因為你存檔時, 就是用字串 (char) 去存檔
所以讀檔時, 只能先讀字串, 再轉成數字

除非存檔時用數字存(二進位檔), 讀檔才能用數字(如long)去讀
存檔, 讀檔兩邊要一致才可以

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-5 20:56 , Processed in 0.144469 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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