我刚刚购买了Seeed的用于Arduino的TFT Touch Shield 2.0,但似乎无法弄清楚如何在保持绘制到屏幕的能力的同时访问SD卡。教程和文档(对我而言)非常微不足道,并且产品站点上的大多数问题似乎都指向同一wiki页面,除了示例文件从卡上绘制位图以外,该页面上没有解释任何有关SD接口的内容。 。
我以前将SD接口与Ethernet Shield一起使用,但是从那以后已经很长时间了,所以我不太记得它的来龙去脉。从我的旧代码看来,对于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()
。
我假设发生的事情是出于某种与SPI相关的原因将引脚11到13设置为输入,将TFT芯片选择“启用”模式设置为HIGH,然后随后启用了屏幕。启动串行监控器,然后启动SPI,然后启动TFT。这些事情发生后,它会对我执行未知的操作,启动卡,然后使用标准卡初始化方法。它通过准备绘制位图完成并发送此“命令0x2c”,该命令在基础库中经常使用,以“开始编写以显示ram”。
问题是我尝试使用此代码初始化TFT和SD卡,然后尝试绘制第二个示例中所示的图形,但这没有用。我需要能够从SD卡读取字节,然后能够在屏幕上绘制简单的图形并重复。
所以我的问题是:曾经使用过此防护罩或对此有经验的人是否能够解释应该如何编写代码以允许同时使用SD卡和屏幕,或者初始化和SPI流程如何工作以实现这一目标?可能的?
预先感谢您的回答!
(此外,如果这不是此问题的正确SE网站,请随时进行相应迁移。)
实际上,该问题的解决方案非常简单,以前合并源文件时,我肯定做错了什么。
初始化代码如下所示:
#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卡。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句