王伟强课程作品设计说明.docx

上传人:b****5 文档编号:3725146 上传时间:2022-11-24 格式:DOCX 页数:7 大小:334.13KB
下载 相关 举报
王伟强课程作品设计说明.docx_第1页
第1页 / 共7页
王伟强课程作品设计说明.docx_第2页
第2页 / 共7页
王伟强课程作品设计说明.docx_第3页
第3页 / 共7页
王伟强课程作品设计说明.docx_第4页
第4页 / 共7页
王伟强课程作品设计说明.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

王伟强课程作品设计说明.docx

《王伟强课程作品设计说明.docx》由会员分享,可在线阅读,更多相关《王伟强课程作品设计说明.docx(7页珍藏版)》请在冰豆网上搜索。

王伟强课程作品设计说明.docx

王伟强课程作品设计说明

2015-2016学年第二学期

Arduino课程作品说明书

作品题目:

arduino读写SD卡

班级软件14-1软件14-1

姓名王伟强吴洋

学号20140256942014025698

指导教师关明山

目录

第1章作品硬件设计2

1.1功能描述2

1.2模块说明2

1.3各个模块连接图4

第2章软件设计部分5

2.1软件执行流程、读写思想5

2.2软件源代码6

第1章作品硬件设计

1.1功能描述

系统由Arduino控制板(如图一)、杜邦线、SD卡读写模块、SD卡大卡卡托、喇叭组成。

Arduino连接SD卡读写模块,SD卡模块可读大卡也可通过SD卡卡托读小卡。

使用库文件,通过喇叭或者耳机可实现播放音频文件的功能,使用窗口监视器实现SD卡的读写功能。

1.2模块说明

Arduino,是一个基于开放原始码的软硬体平台,构建于开放原始码simpleI/O介面版,并且具有使用类似Java,C语言的Processing/Wiring开发环境。

在我看来arduino的编程十分简单,有一点C语言基础或者说没有,都可以进行教学。

对于刚刚上大学的没有一点基础的新生是一个很不错的选择,因为arduino可以做出许多十分有趣的创意产品,对他们的吸引力很强,可以调动他们的积极性,而且上手容易,成本低。

1.黄色部分是用来连接电脑的USB线的,用来给板子供电以及下载程序使用的。

2.紫色部分为电源部分,接上USB或者外部电源后可以从这个位置为扩展板,自己的面包板等供电。

当然反过来说不接USB与外部电源的话可以从这里给arduino供电。

3.浅绿色部分是数字逻辑输出口,可以按照你编写的程序来输出高电平(5V左右)或者低电平(0.3V左右),一共有13个数字IO口,编号从0~12。

4.蓝色部分为模拟输入口(ADC),可以用来测量模拟量的。

一共六个通道,编号从A0~A5。

黑色部分为外部供电输入,外部7V~12VDC输入。

当USB的500ma电流不够使用的时候可以接上使用。

一般是用不上的啦。

5.深绿色部分是指示灯。

USB和POWER分别指示的是使用外部供电还是USB供电。

L是给用户使用的指示灯,连接到逻辑输出的13号脚。

图一arduino模板

SD卡读写模块(如图二),SD卡是一种低电压的flash闪存产品,有标准的MMC/SPI两种操作模块(如图三)。

对于MMC操作模式,读写速度快,控制信号线多,操作复杂,对于SPI操作模块,速度慢,线少,操作相对简单。

SD卡读写模块内置文件系统、可直接进行文件读写的SD卡模块,适用于单片机系统实现大容量存储方案。

单片机使用模块,可直接进行目录遍历、目录创建、目录删除、文件创建、文件删除、文件修改、卡格式化等标准文件系统操作,无需了解SD卡内部存储结构及文件系统实现细节。

特别是随着SD卡在生活中的普及,嵌入式系统把读写SD卡功能集成到系统,成为一种趋势。

图二、SD卡读写模块

图三、SD卡模块各部分功能

SD卡模块技术规格(如图四、五)

1、支持标准FAT文件系统,模块操作的SD卡可直接插入电脑读写。

2、模块内置MicroSD卡插槽,用户也可以自己扩展其它存储卡插槽,支持各有类SD、MMC卡。

3、模块作为SPI从机与单片机通讯,SPI总线的最高速率可达4Mbps。

读SD卡文件的速度最高达128K字节/秒,写SD卡文件的速度最高达64K字节/秒。

4、模块支持的SD卡容量为2GBytes,超过2G的SD卡,则作为2G使用。

5、尺寸50mm*20mm,2.54mm间距通用排针,方便集成。

1.3各个模块连接图

图四、电路连接原理图

图五、实物连接图

第2章软件设计部分

2.1软件执行流程、读写思想

读写思想:

分别用杜邦线在4、11、12、13、D3.3v接口与SD卡读写模块进行连接,利用BillGreiman开发的SdFat.h和SdFatUtil.h头文件和库文件就可实现读写。

2.2软件源代码

附程序代码:

#include 

// Callback target, prints output to serial

void DirCallback(char *buf) { 

  Serial.println(buf);

}

char AudioFileName[16];

// Create static buffer 

#define BIGBUFSIZE (2*512)      // bigger than 2*512 is often only possible on Arduino megas!

uint8_t bigbuf[BIGBUFSIZE];

// helper function to determine free ram at runtime

int freeRam () {

  extern int __heap_start, *__brkval; 

  int v; 

  return (int) &v - (__brkval == 0 ?

 (int) &__heap_start :

 (int) __brkval); 

}

void setup()

{

 // Open serial communications and wait for port to open:

  Serial.begin(9600);

   while (!

Serial) {

    ; // wait for serial port to connect. Needed for Leonardo only

  }

  

  Serial.print(F("Free Ram:

 "));

  Serial.println(freeRam());

  

  // Setting the buffer manually for more flexibility

  SdPlay.setWorkBuffer(bigbuf, BIGBUFSIZE); 

  

  Serial.print(F("\nInitializing SimpleSDAudio V" SSDA_VERSIONSTRING " ..."));  

  

  // If your SD card CS-Pin is not at Pin 4, enable and adapt the following line:

  //SdPlay.setSDCSPin(10);

  

  // Select between SSDA_MODE_FULLRATE or SSDA_MODE_HALFRATE (62.5kHz or 31.25kHz)

  // and the output modes SSDA_MODE_MONO_BRIDGE, SSDA_MODE_MONO or SSDA_MODE_STEREO

  if (!

SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO)) {

    Serial.println(F("initialization failed. Things to check:

"));

    Serial.println(F("* is a card is inserted?

"));

    Serial.println(F("* Is your wiring correct?

"));

    Serial.println(F("* maybe you need to change the chipSelect pin to match your shield or module?

"));

    Serial.print(F("Error code:

 "));

    Serial.println(SdPlay.getLastError());

    while

(1);

  } else {

    Serial.println(F("Wiring is correct and a card is present.")); 

  }

  

}

void loop(void) {

  uint8_t count=0, c, flag;

  

  Serial.println(F("Files on card:

"));

  SdPlay.dir(&DirCallback);

ReEnter:

 

  count = 0;

  Serial.println(F("\r\nEnter filename (send newline after input):

"));

  do {

    while(!

Serial.available()) ;

    c = Serial.read();

    if(c > ' ') AudioFileName[count++] = c;

  } while((c !

= 0x0d) && (c !

= 0x0a) && (count < 14));

  AudioFileName[count++] = 0;

  

  Serial.print(F("Looking for file... "));

  if(!

SdPlay.setFile(AudioFileName)) {

    Serial.println(F(" not found on card!

 Error code:

 "));

    Serial.println(SdPlay.getLastError());

    goto ReEnter;

  } else {

   Serial.println(F("found.")); 

  }    

  Serial.println(F("Press s for stop, p for play, h for pause, f to select new file, d for deinit, v to view status.")); 

  flag = 1;

  

  while(flag) {

    SdPlay.worker();

    if(Serial.available()) {

      c = Serial.read();

      switch(c) {

         case 's':

           SdPlay.stop();

           Serial.println(F("Stopped."));

           break; 

         case 'p':

           SdPlay.play();

           Serial.println(F("Play."));

           break;

         case 'h':

           SdPlay.pause();

           Serial.println(F("Pause."));

           break;  

case 'd':

           SdPlay.deInit();

           Serial.println(F("SdPlay deinitialized. You can now safely remove card. System halted."));

           while

(1) ;

           break;  

           case 'f':

           flag = 0;

           break; 

    case 'v':

           Serial.print(F("Status:

 isStopped="));

           Serial.print(SdPlay.isStopped());

           Serial.print(F(", isPlaying="));

           Serial.print(SdPlay.isPlaying());

           Serial.print(F(", isPaused="));

           Serial.print(SdPlay.isPaused());

           Serial.print(F(", isUnderrunOccured="));

           Serial.print(SdPlay.isUnderrunOccured());

           Serial.print(F(", getLastError="));

           Serial.println(SdPlay.getLastError());

           Serial.print(F("Free RAM:

 "));

           Serial.println(freeRam());

           break;       } }}}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1