我刚为Arduino购买了Seeed的TFT TFT Touch Shield 2.0,但我似乎不知道如何在保持绘制屏幕的能力的同时访问SD卡。这些教程和文档(对我来说)并不多见,产品站点上的大多数问题似乎都指向同一个wiki页面,它没有解释任何关于SD接口的内容,只是说明了哪个示例文件从卡片中绘制位图。
我以前使用过以太网屏蔽的SD接口,但从那以后已经很长时间了,所以我不太记得它的来龙去脉。从我以前的代码来看,对于SD库的正常使用,您只需:
#include <SD.h>
void setup()
{
pinMode(4, OUTPUT);
if (!SD.begin(4))
{
//Fail
}
... //Open file, read, etc.
}要正常使用TFT屏幕(绘制位图除外),您可以这样做:
#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卡绘制位图的示例程序中,设置代码如下所示:
#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站点,请随意迁移它。)
发布于 2014-01-09 04:32:55
这个问题的解决方案其实很简单,当我以前合并源文件时,我肯定做错了什么。
初始化代码如下所示:
#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卡都是可用的,正如我们所希望的那样。
https://stackoverflow.com/questions/20821259
复制相似问题