首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Seeed Studio TFT TFT Touch Shield 2.0中使用SD卡

在Seeed Studio TFT TFT Touch Shield 2.0中使用SD卡
EN

Stack Overflow用户
提问于 2013-12-29 01:35:41
回答 1查看 2.4K关注 0票数 1

我刚为Arduino购买了Seeed的TFT TFT Touch Shield 2.0,但我似乎不知道如何在保持绘制屏幕的能力的同时访问SD卡。这些教程和文档(对我来说)并不多见,产品站点上的大多数问题似乎都指向同一个wiki页面,它没有解释任何关于SD接口的内容,只是说明了哪个示例文件从卡片中绘制位图。

我以前使用过以太网屏蔽的SD接口,但从那以后已经很长时间了,所以我不太记得它的来龙去脉。从我以前的代码来看,对于SD库的正常使用,您只需:

代码语言:javascript
复制
#include <SD.h>

void setup()
{
    pinMode(4, OUTPUT);

    if (!SD.begin(4))
    {
        //Fail
    }

    ...  //Open file, read, etc.
}

要正常使用TFT屏幕(绘制位图除外),您可以这样做:

代码语言:javascript
复制
#include <SD.h>
#include <TFTv2.h>
#include <SPI.h>

void setup()
{
    TFT_BL_ON; //Enable Backlight

    Tft.TFTinit(); //Initialize TFT Screen

    Tft.drawCircle(100, 100, 30,YELLOW); //Draw
}

在wiki页面上提供的从SD卡绘制位图的示例程序中,设置代码如下所示:

代码语言:javascript
复制
#include <SD.h>
#include <TFTv2.h>
#include <SPI.h>

#define chipSelect 4

Sd2Card card;

void setup()
{
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  pinMode(13,INPUT);
  TFT_CS_HIGH;
  pinMode(chipSelect,OUTPUT);
  digitalWrite(chipSelect,HIGH);

  Serial.begin(38400);
  SPI.begin(); 
  Tft.TFTinit();
  //SPI.setClockDivider(SPI_CLOCK_DIV4);
  //SDcard_info();
  /**/
  DDRB |= 0x04;
  card.init(SPI_FULL_SPEED,chipSelect);
  if(!SD.begin(chipSelect))//SPI_QUARTER_SPEED,
  { //53 is used as chip select pin
    Serial.println("failed!");
    while(1);
  }
  Serial.println("SD OK!");

  Tft.setCol(0,239);
  Tft.setPage(0,319);
  Tft.sendCMD(0x2c);//start to write to display ram
  TFT_BL_ON;
}

loop()中,位图依次用SD.open()打开,绘制,然后用SD.close()关闭。

我假设的情况是,引脚11到13被设置为输入,因为一些与SPI相关的原因,TFT芯片选择“启用”模式被设置为高,然后屏幕随后被启用。串行监控器启动,然后是SPI,然后是TFT。这些事情发生后,它会做一些我不知道的事情,启动卡片,然后使用标准的卡初始化方法。最后,它准备绘制位图并发送这个‘命令0x2c',这个命令在底层库中经常使用,用于“开始写入显示ram”。

问题是,我已经尝试使用此代码初始化TFT和SD卡,然后尝试绘制图形,如我的第二个示例所示,但这是行不通的。我需要能够从SD卡读取字节,然后能够在屏幕上绘制简单的图形,并重复。

所以我的问题是:以前使用过这个屏蔽的人,或者在这方面有经验的人,是否能够解释应该如何编写代码以允许SD卡和屏幕的使用,或者初始化和SPI进程如何工作才能做到这一点?

谢谢你提前给我答案!

(此外,如果这不是这个问题的正确的SE站点,请随意迁移它。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 04:32:55

这个问题的解决方案其实很简单,当我以前合并源文件时,我肯定做错了什么。

初始化代码如下所示:

代码语言:javascript
复制
#include <SD.h>
#include <TFTv2.h>
#include <SPI.h>

Sd2Card card;

void setup()
{
    pinMode(11, INPUT); //Pin mode changes; not sure what for
    pinMode(12, INPUT);
    pinMode(13, INPUT);
    TFT_CS_HIGH; //Something with chipselect and the TFT
    pinMode(4, OUTPUT); //Set chipselect pin to OUTPUT
    digitalWrite(4, HIGH); //Set chipselect mode

    SPI.begin(); //Start SPI
    Tft.TFTinit(); //Initialize the TFT
    TFT_BL_ON; //Turn on the TFT Backlight
    Serial.begin(9600); //Start serial output

    DDRB |= 0x04; //Some sort of processor IO port?
    if(!SD.begin(4)) //Start the SD card
    {
        while(true) { } //Fail
    }
}

它基本上是位图初始化代码,最后省略了额外的TFT命令。在此之后,屏幕和SD卡都是可用的,正如我们所希望的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20821259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档