楼主你好,感谢您的分享,我学习了您的程序,使用buffer高速采集音频,存到sd卡,并打印到串口监视。
我已经成功存到sd卡中,并打印到串口处监视。
可是当我修改buffer的大小时候,整个程序就没反应了,不知您是否能找到原因?
以下是程序:
/*
此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。
电路部分
* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,
如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。
* SD卡与arduino控制板使用SPI总线连接
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SD.h>
int Input = A0; //声明输入引脚
// CS引脚为pin4,这里也沿用官方默认设置
const int chipSelect = 4; //设定CS接口
int i,sta=0;
int Y[480];
int Buffer[960];
void sample()
{
for (i=0;i<960;i++)
{
Buffer[i]=ADCH;
}
}
void Transform()
{
for(sta=0;sta<480;sta++)
{
if (Buffer[sta]<128&&Buffer[sta+2]>128)
break;
}
for (i=0;i<480;i++)
Y[i]=63-(Buffer[i+sta]>>2);
}
void setup()
{
Serial.begin(9600); //设置串口通信波特率为9600
Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...
pinMode(10, OUTPUT);
ADMUX=0xe0;
ADCSRA=0xe2;
if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.
}
void loop()
{
// 定义数组
String dataString = "";
String timeString = "";
String timeString1 = "";
/* // 读取三个传感器值,写入数组
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
}
*/
timeString= String(millis());
sample();
timeString1=String(millis());
Transform();
// 打开文件,注意在同一时间只能有一个文件被打开
// 如果你要打开另一个文件,就需要先关闭前一个
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// 打开datalog.txt文件,读写状态,位置在文件末尾。
if (dataFile) {
dataFile.print(timeString);
dataFile.print(timeString1);
for (i=0;i<480;i++)
{
dataString =String(Y[i]);
dataString +=",";
dataFile.print(dataString);
// 数组dataString输出到串口
Serial.println(dataString);
}
Serial.println(timeString);
Serial.println(timeString1);
dataFile.close();
}
// 如果无法打开文件,串口输出错误信息error opening datalog.txt
else {
Serial.println("error opening datalog.txt");
}
}
|