NO.22 基于Arduino的数字示波器(完成)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: ntwhq

NO.22 基于Arduino的数字示波器(完成)

  [复制链接]
 楼主| 发表于 2014-11-30 22:16 | 显示全部楼层
SPARTANII117 发表于 2014-11-16 18:50
楼主大人你好,我想问下用绿屏的12864做您这个示波器为什么看起来和蓝屏的刚好是相反的(蓝屏不显示的地方 ...

调一下对比度看看。
发表于 2014-12-15 22:14 | 显示全部楼层
楼主你好,感谢您的分享,我学习了您的程序,使用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");
  }
}
发表于 2014-12-16 12:30 | 显示全部楼层
好像问题出在Transform(),
可是我实在不懂这里面是什么意思
发表于 2014-12-16 16:40 | 显示全部楼层
楼主,我想参考这个做一个锂电池的充放电仪,检测下电池容量。可有建议否?
发表于 2014-12-16 21:21 | 显示全部楼层
atyzy 发表于 2014-12-15 22:14
楼主你好,感谢您的分享,我学习了您的程序,使用buffer高速采集音频,存到sd卡,并打印到串口监视。
我已 ...

好像找到原因了,我把数组减少一个,采集量可以明显增加,估计是ram不够。
 楼主| 发表于 2014-12-29 16:53 | 显示全部楼层
atyzy 发表于 2014-12-16 21:21
好像找到原因了,我把数组减少一个,采集量可以明显增加,估计是ram不够。
...

嗯,应该是RAM资源不够了。
 楼主| 发表于 2014-12-29 16:55 | 显示全部楼层
dragoncool 发表于 2014-12-16 16:40
楼主,我想参考这个做一个锂电池的充放电仪,检测下电池容量。可有建议否? ...

您好!你是想用它显示充放电曲线吧,那采样时间间隔要作调整。
发表于 2015-1-9 10:00 | 显示全部楼层
非常好啊,看来Arduino mini 的确是个好东西啊! 楼主NB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-30 01:23 , Processed in 0.078849 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表