我试图在存储在SD卡中的文件中显示文字。 我可以阅读第一行到第二行到最后一行。但是,当我尝试读取最后一行时,程序停止运行,LCD显示所有白色方块。我在这做错了什么?
myFile.seek(0);
char cr;
for(unsigned int i = 0; i < 15;){
cr = myFile.read();
if(cr == '\n')
{
i++;
}
}
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r'))
break;
lcd.print(cr);
}
这是文件的内容:
1. 00.1
2. SUN
3. 00.00.0001
4. 00:00:01
5. 00.2
6. MON
7. 00.00.0002
8. 00:00:02
9. 00.3
10. WED
11. 00.00.0003
12. 00:00:03
13. 00.4
14. THU
15. 00.00.0004
16. 00:00:04
答案 0 :(得分:0)
下面:
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r'))
break;
lcd.print(cr);
}
您有一些代码应该在文件的第16行读取和打印所有字符,并在找到换行符字符时停止。< / p>
看起来可以接受,但 第16行 未被终止 <{1}}或\n
会怎样?
\r
的{{3}}表示如果没有可用数据,此函数将返回read()
。显然,如果文件在没有换行符的情况下结束,那正是将要发生的事情。所以现在你在一个循环中卡住,你无休止地阅读-1
,但为什么你在屏幕上看到那些白色块?
让我们看看。 -1
继承自lcd.print(char)
,documentation代码如下:
class Print
在contains内,size_t Print::print(char c)
{
return write(c);
}
被声明为纯虚方法,这意味着它的实现可以在其子类中找到,在这种情况下Print.h
:
Print::write(uint8_t)
现在,我们发现编码为inline size_t LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
return 1; // assume sucess
}
的{{1}}类型的原始-1
被解释为char
类型的0xFF
。快速浏览下表
显示255(最后一列,最后一行)对应一个完整的黑色方块。
好的,我们几乎就在那里,只有你看到白色方块而不是黑色方块。在这方面,应该注意你的代码是 continuosly ,并且没有任何延迟,在 lcd 上打印东西。因此 lcd屏幕可能会刷新 (其内容可能会移位?),从而使黑色块< / em>出现更白而不是真实的。
TL; DR解决方案:
255