我的代码当前逐个接收一本书的字符,并对其进行预处理,使其以的形式显示
我去
图书馆取
我最喜欢的
棒球帽
而不是
我去了libr
美术馆,挑选了我最喜欢的棒球
l hat
这是默认的Adafruit_ST7735.h换行文本选项的作用。一切正常,但现在我很难实现页面功能。我希望能够输入页码,并且该函数只显示该页面的预处理文本(其中页面是通过将整本书的大小除以显示器可以容纳的字符数来确定的(。这是一个非常复杂的系统,我已经敲了好几个小时的头,但它似乎远远超出了我的智商。这是我的空白代码:(从SD卡上的文件中读取字符(我无法解释它是如何工作的,但快速阅读if语句应该可以了解它发生了什么。我认为,当单词不符时转到新行的系统导致对页面空间的错误计算,并开始扰乱文本时,主要问题就会出现。我怀疑的另一个问题是,它需要以某种方式计算已经通过的页面,以便正确显示当前页面。此外,当最后一个单词不适合页面末尾的空格时,它会转到下一行,但不会显示在下一页上。也许有更好的方法来完成整个系统,也许有一个库或一个现成的算法。如果必须的话,我准备重写整件事。
#define line_size 26
void open_book_page(String file_name, int page) {
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
File myFile = SD.open(file_name);
if (myFile) {
int space_left = line_size;
String current_word = "";
int page_space_debug = 0;
while (myFile.available()) {
char c = myFile.read();
// myFile.size() - myFile.available() gives the characters receieved until now
if(myFile.size() - myFile.available() >= page * 401 && myFile.size() - myFile.available() <= (page * 401) + 401) {
if(current_word.length() == space_left + current_word.length()) {
if(c == ' ') {
tft.print(current_word);
tft.println();
current_word = "";
space_left = line_size;
} else {
tft.println();
current_word += c;
current_word.remove(0, 1);
space_left = line_size - current_word.length();
}
} else {
if(c == ' ') {
tft.print(current_word);
current_word = c;
} else {
current_word += c;
}
space_left--;
}
}
}
if(current_word != "") {
if(space_left < current_word.length()) {
tft.println();
tft.print(current_word);
} else {
tft.print(current_word);
}
}
myFile.close();
} else {
tft.print("Error opening file.");
}
}
如果有什么问题,我很乐意回答。
我在stm32f103c8t6板上做这整件事,而不是在电脑上。我的记忆力和存储能力有限
**
解决方案!我可以从发送文本的手机应用程序中进行所有预处理
**
没有stm32f103c8t6板,也没有任何方法来调试您的确切代码。我能提供的最好的解决方案是psudode解决方案。
如果你对文件进行预处理,使每个"页面"恰好是你可以在屏幕上容纳的字符数量(用空格填充每行的末尾(,你应该能够使用页码作为文件的偏移量。
#define line_size 26
// line_size * 4 lines?
#define page_size 104
void open_book_page(String file_name, int page){
File myFile = SD.open(file_name);
if( myFile.available() ){
if( myFile.seek(page * page_size) ){
// read page_size characters and put on screen
}
myFile.close();
}
}
我希望这对有足够的帮助