Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的arduino tft显示屏(adafruit gfx库)上未更新退格删除的文本_C++_Arduino_Arduino Uno_Adafruit - Fatal编程技术网

C++ 我的arduino tft显示屏(adafruit gfx库)上未更新退格删除的文本

C++ 我的arduino tft显示屏(adafruit gfx库)上未更新退格删除的文本,c++,arduino,arduino-uno,adafruit,C++,Arduino,Arduino Uno,Adafruit,对于大学来说,我们需要制作一个由Arduino控制的统一游戏。我的想法是一个黑客游戏,在游戏中,Arduino作为“黑客设备”进行黑客攻击。arduino会有一个屏幕,屏幕上会有一个基本的命令行界面,可以让我输入简单的命令来“破解”,但我在文本和清除文本方面遇到了麻烦 我已经能够使用unity将键入的字符发送到显示器,并使用backspace函数(按backspace将删除字符串中的最后一个字符) 我第一次遇到的问题是在编写时清除所有文本(调用tft.print不会清除以前的任何文本)。我用的是

对于大学来说,我们需要制作一个由Arduino控制的统一游戏。我的想法是一个黑客游戏,在游戏中,Arduino作为“黑客设备”进行黑客攻击。arduino会有一个屏幕,屏幕上会有一个基本的命令行界面,可以让我输入简单的命令来“破解”,但我在文本和清除文本方面遇到了麻烦

我已经能够使用unity将键入的字符发送到显示器,并使用backspace函数(按backspace将删除字符串中的最后一个字符)

我第一次遇到的问题是在编写时清除所有文本(调用tft.print不会清除以前的任何文本)。我用的是很慢的fillScreen。我发现setTextColor有第二个参数,它允许我将所有特定颜色的文本设置为不同的颜色。将其设置为黑色将基本上清除它

这使得它在写入屏幕时可以立即更新,但我现在有了一个新问题,backspace将不再会

我的理解是,当删除字符时,在调用restart/fillScreen之前,当调用setTextColor并将其保留在屏幕上时,字符的颜色不会更新

我真的不知道如何解决这个问题,所有的谷歌搜索结果几乎没有帮助

以下是我更新文本的代码:

void updateString(char c){
  tft.setTextColor(WHITE,BLACK);  
  if(c!='<'){
    //Add new character to end of string
    str.concat(String(c));
  }
  else if(c=='<' && str.length()>2){
    //Remove last character in string
    str.remove(str.length()-1);  
  }
  //Set cursor back to 0,0
  tft.setCursor(0,0);
  //Display text
  tft.print(str);
}
void updateString(字符c){
tft.setTextColor(白色、黑色);

如果(c!='可能,请使用与tft.clear()类似的函数
每次刷新屏幕时,或者可以在文本上绘制一个填充的背景正方形,使其看起来像已被擦除,然后重新编写文本。

听起来您使用的是按比例间隔的字体,而不是Adafruit_GFX附带的原始经典字体。历史上,使用默认经典字体时可以将文本的背景颜色选项设置为与屏幕背景相同的颜色(通常为黑色)。这将用新数据覆盖旧的屏幕内容并正常工作,因为使用经典字体的字符大小相同。当使用按比例间隔的字体时,字体的背景色选项将被设计禁用

这可能是因为较慢的AVR上的内存需求和速度。无论如何,当使用按比例间隔的字体时,背景颜色功能将不起作用,因为大小不一致的字符与相邻字符重叠在同一区域

有两种解决方法。Adafruit说,为了在使用自定义字体时替换以前绘制的文本,您可以:

  • 使用getTextBounds()确定包含一个矩形的最小矩形 字符串,然后在绘图之前使用fillRect()清除该区域 新文本。或

  • 使用GFXcanvas1为固定大小的区域创建屏幕外位图, 在GFXcanvas1对象中绘制文本,然后复制到屏幕 使用drawBitmap()

  • 请注意,上面的选项1和2是互斥的。第二种方法需要更多内存。第一种方法并不完美,会产生少量闪烁,但如果仔细编码,通常是可以接受的

    我希望我已经理解了你的问题的本质,并以令人满意的方式回答了这个问题。如果没有其他问题,至少现在你知道为什么自定义字体不能与使用原始“经典”Adafruit字体的所谓背景色功能一起工作


    尼基·库珀(Nikki Cooper)

    从我所知道的情况来看,他也做了同样的事情。(写文本很好,退格也有同样的问题)