使用arduino进行文件传输

时间:2016-05-04 14:33:29

标签: file arduino

我的最终目标是通过XBEE向另一个arduino发送一个30 KB的文件。但是现在我只想在连接到第一个arduino的SD上复制一个4KB的文件。首先,我尝试将数据一个字节一个字节发送。工作和文件成功复制。但我必须有一个缓冲区然后将数据发送到XBEE 64字节数据包,所以我应该能够以64字节数据包读写文件。这就是我所做的:

#include <SD.h>
#include <SPI.h>

void setup() {

 Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
  }
 if (!SD.begin(4)) {

Serial.println("begin failed");
return;
   }

File file = SD.open("student.jpg",FILE_READ);
File endFile = SD.open("cop.jpg",FILE_WRITE);
 Serial.flush();

char buf[64];
if(file) {  

while (file.position() < file.size())
         { 
   while (file.read(buf, sizeof(buf)) == sizeof(buf))  // read chunk of 64bytes 
         {
        Serial.println(((float)file.position()/(float)file.size())*100);//progress %
        endFile.write(buf); // Send to xbee via serial
         delay(50); 
         }


      }
       file.close();
} 

 }
   void loop() {

}

它成功完成其进度直到100%但是当我在笔记本电脑上打开SD时,文件被创建但显示为0 KB文件。

问题是什么?

1 个答案:

答案 0 :(得分:2)

你没有告诉while(file.position() < file.size()) { // The docs tell me this should be file.readBytes... but then I wonder why file.read even compiled for you? // So if readBytes doesn't work, go back to "read". int bytesRead = file.readBytes(buf, sizeof(buf)); Serial.println(((float)file.position()/(float)file.size())*100);//progress % // We have to specify the length! Otherwise it will stop when encountering a null byte... endFile.write(buf, bytesRead); // Send to xbee via serial delay(50); } 缓冲区的长度是多少,所以它会认为它是一个以空字符结尾的字符串(它不是)。

另外,内部循环似乎不仅是不必要的,甚至是有害的,因为如果它少于64个字节,它会跳过最后一个块。

检查出来:

PermutationGenerator