请教arduino 字符串连接Due如何与SD卡连接

查看: 9154|回复: 21
求助,如何通过Arduino自身的USB将SD卡中的文件(任意大小)发送到PC呢?
RT,最近突然有这么个需求。因为使用Arduino作为控制器,将一些数据存在SD卡中,每次想获得数据都要把SD卡取下来放进读卡器里存到电脑中,而这时的Arduino却一直用USB连着电脑,总觉得要是直接能通过USB把文件传送到PC中是件很完美的事情。
查找了好多资料,只有一个人成功的将SD卡中的jpg图片发送给电脑端的processing了:
,124022.new.html
Arduino:
#include &SD.h&
File photoF
const int buttonPin = 7;
const int ledPin =&&5;
void setup(){
&&Serial.begin(115200);
&&pinMode(buttonPin,INPUT);
&&pinMode(ledPin,OUTPUT);
&&//Serial.println(&initializing sd card&);
&&pinMode(10,OUTPUT);& && && & // CS pin of SD Card Shield
&&if (!SD.begin(10)) {
& & Serial.print(&sd initialzation failed&);
& &
&&}
&&//Serial.println(&sd initialization done&);
}
void loop(){
&&while(1){
& & // Serial.println(&press the button to send picture&);
& & Serial.flush();& &
& & while(digitalRead(buttonPin) == LOW);
& & if(digitalRead(buttonPin) == HIGH){
& && &delay(50);
& && &if(digitalRead(buttonPin) == HIGH){
& && &&&delay(200);
& && &&&File photoFile = SD.open(&pic02.jpg&);
& && &&&if (photoFile) {
& && && & while (photoFile.position() & photoFile.size()) {
& && && && &digitalWrite(ledPin,HIGH);& && && && && && && &
& && && && &Serial.write(photoFile.read());
& && && & }
& && && & photoFile.close();
& && && & digitalWrite(ledPin,LOW);& &
& && &&&}&&
& && &&&else {
& && && & Serial.println(&error sending photo&);
& && &&&}& && && && &
& && &}
& && &//Serial.println(&photo sent&);& &
& & }
&&}
}
复制代码
Processing:
import processing.serial.*;
Serial myP
OutputS
void setup() {
&&size(320, 240);
&&//println( Serial.list() );
&&myPort = new Serial( this, Serial.list()[0], 115200);
&&myPort.clear();
&&output = createOutput(&pic02.jpg&);
}
void draw() {
& & while ( myPort.available () & 0 ) {
& && &output.write(myPort.read());
& & }
&&}
&&catch (IOException e) {
& & e.printStackTrace();
&&}
}
void keyPressed() {
& & output.flush();&&// Writes the remaining data to the file
& & output.close();&&// Finishes the file
&&}
&&catch (IOException e) {
& & e.printStackTrace();
&&}
}复制代码
对于这个方案我有两个疑问:
1.传送的jpg没有大小限制吗?
2.processing可以制作成独立的文件接收小程序吗?
希望高手们都来研究研究,在这里先谢过了~~~~
首先通过USB串口发送的速度也就115200baud,14KBPS左右,速度比较慢。copy16M字节的内容超过1000秒,所以这个想法实用性不高。另外,传输10几K或上M字节的文件,如果没有差错校验机制,很难保证没有若干个字符传错,传图片的话就会出现显示不一致等等。但如果加入复杂的传输协议,估计arduino的sram不够用。可行性好的话早就有人做了。建议用其他方式传输。
Serial.write(photoFile.read());
意思串口一位一位的写,那就PC端串口通信。建立一个同样格式的文件,然后一位一位收就行了。
实际上没这么简单吧,还要考虑数据丢失的问题,同步的问题等等&
leicheng 发表于
首先通过USB串口发送的速度也就115200baud,14KBPS左右,速度比较慢。copy16M字节的内容超过1000秒,所以这个 ...
什么其他方式呢?有没有成熟的例子或者库?
看看论坛中的其他通信例子吧,我没仔细研究过。&
麽麽茶㊣ 发表于
Serial.write(photoFile.read());
意思串口一位一位的写,那就PC端串口通信。建立一个同样格式的文件,然后 ...
就是这么简单。。你想太多了。。
麽麽茶㊣ 发表于
就是这么简单。。你想太多了。。
丢失数据怎么办
shenhaiyu 发表于
丢失数据怎么办
还真没碰到过。。今天SD卡到货&&我试试看
麽麽茶㊣ 发表于
还真没碰到过。。今天SD卡到货&&我试试看
嗯,发个测试贴,让大家也学习学习
shenhaiyu 发表于
嗯,发个测试贴,让大家也学习学习
我现在用的是MEGA2560,各种连不上。。
** MOSI - pin 51
** MISO - pin 50
** CLK - pin 52
** CS - pin 40const int chipSelect = 40;&&//设定CS接口
void setup()
{
&&Serial.begin(9600);&&//设置串口通信波特率为9600
&&Serial.print(&Initializing SD card...&);&&//串口输出数据Initializing SD card...
&&pinMode(53, OUTPUT);
&&if (!SD.begin(chipSelect)) {&&//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
& & Serial.println(&Card failed, or not present&);
& &
&&}
&&Serial.println(&card initialized.&);&&//与SD卡通信成功,串口输出信息card initialized.
}复制代码128的板子在压力测试。。只能等明天了。。
麽麽茶㊣ 发表于
我现在用的是MEGA2560,各种连不上。。
** MOSI - pin 51
** MISO - pin 50
期待你的测试结果哈~~~
Powered by鍙?渶涓}

我要回帖

更多关于 arduino蓝牙模块连接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信