求助,关于arduino SD卡,能帮我看看程序吗,谢谢!
想做一个从SD卡里的文件用拼音查询汉字的程序,但是File file=SD.open("1.txt",FILE_READ); 这一句只能写到递归函数里,写到初始化里在递归函数里就不能操作文件了,是什么情况?怎么改进呢?以下是全部代码:
#include<SD.h>
#include<SPI.h>
#include<String.h>
unsigned long fileLength=0;//文件长度
unsigned long poipos=0;//文件指针位置
File file;
String matchPinyin(String);
String search(String,unsigned long,unsigned long);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println(SD.begin(SPI_HALF_SPEED, 4));
File file=SD.open("1.txt",FILE_READ);
fileLength=file.available();
file.close();
Serial.println("汉字");
Serial.println(matchPinyin("a "));
Serial.println(matchPinyin("zuo "));
Serial.println(matchPinyin("hao "));
Serial.println("done");
}
String matchPinyin(String val)
{
return search(val,0,fileLength);
}
String search(String val,unsigned long a,unsigned long b)//传递原值,首位,末位,识别位数
{
char word=0;//缓存所取
int sub=0;//比较下标
File file=SD.open("1.txt",FILE_READ);
unsigned long mid=a/2+b/2;
Serial.print(a);
Serial.print(",");
Serial.print(b);
Serial.print(":");
Serial.println(mid);
if((b-a)<2)
{
return "";
}
//Serial.println("front find");
file.seek(mid);
while(file.peek()!=10/*不是换行*/)//连续向上查询
{
/*Serial.print(" ");
Serial.print(mid);
Serial.print(" ");
Serial.println(file.peek());*/
mid--;
file.seek(mid);
}
//Serial.println("back find");
poipos=mid;
while(file.peek()!=9/*不是空格*/)//连续向下查询
{
/*Serial.print(" ");
Serial.print(file.peek());
Serial.print(" ");
Serial.println(char(file.peek()));*/
file.seek(++poipos);
}
while(file.seek(++poipos),(word=file.peek())!='\r'/*不是回车*/)//依次比较
{
/*Serial.print(" ");
Serial.print(char(val));
Serial.print("==");
Serial.print(char(word));*/
if(val==word)
{
sub++;
}
else if(word>val)//从前寻找
{
Serial.println("front");
yield();
file.close();
return(search(val,a,(a+b)/2));
}
else if(word<val)//从后寻找
{
Serial.println("back");
yield();
file.close();
return(search(val,(a+b)/2,b));
}
}
//此次选择正确
String ret="";
file.seek(++mid);
while(file.peek()!=9)
{
ret+=char(file.read());
}
file.close();
return ret;
}
void loop() {
// put your main code here, to run repeatedly:
}
以下是代码高亮的图片,和需要打开的文件:
以下是代码高亮的图片,和需要打开的文件:
页:
[1]