Bluno Beetle 开发板显示16*16汉字求助
2017-09-272.1万
AI 快速预览详细
本文讨论了使用Bluno Beetle开发板和16x16 RGB全彩LED柔性点阵屏DFR0463进行蓝牙接收汉字显示时遇到的问题。具体故障现象包括`DisplayWordCode`变量在`setup()`中赋值时无法显示汉字,而在`loop()`中动态赋值时可以显示。文章提供了详细的代码分析和故障排查步骤,最终发现将`DisplayWordCode`在`setup()`中赋值是解决问题的关键。
|
各位大神好, 我现在做Bluno Beetle + 16x16 RGB 全彩LED柔性点阵屏 DFR0463 做蓝牙接收汉字显示程序,在测试中,发现一些奇怪的问题,首先上代码,问题如红色部分描述,如下: const uint8_t HanZi_Qiao[]= { //减少篇幅,具体数字忽略, }; const uint8_t HanZi_Shang[]= { //减少篇幅,具体数字忽略, }; const uint8_t HanZi_Wo[]= { //减少篇幅,具体数字忽略, }; const uint16_t colors[] = { matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off' Serial.begin(115200); } uint8_t i=1; void loop() { // uint8_t i,j; uint8_t buf[32]; DisplayWordCode = 2;//如果不赋固定值,则无法显示 // i++; //用i循环给DisplayWordCode赋值,不显示 // if(i>3)i=1; if (stringComplete) //当接收到蓝牙数据是,进行判断,能正确判断 但无法显示 { DisplayCodeJudge(); //解析汉字码并赋显示值DisplayWordCode stringComplete = false; //当接收成功后,只判断一次 } { // GetNewWordLib(HanZi_Shang,DisplayBuf); //仅这一行和下面一行用于显示汉字,无显示,DisplayBuf为全局变量 // Display_HanZi(DisplayBuf); // GetNewWordLib(HanZi_Shang,buf); //仅这一行和下面一行用于显示汉字,能显示,buf为局部变量 // Display_HanZi(buf); if(DisplayWordCode == 1) //当上面循环给DisplayWordCode赋值时,能显示,如果DisplayWordCode在setup中赋值,无显示 { // Serial.println("Display 1...");//程序运行时,该行能正常运行 GetNewWordLib(HanZi_Qiao,buf); Display_HanZi(buf); // Serial.println("Display 1 End...");//程序运行时,该行能正常运行 } else if(DisplayWordCode == 2) { GetNewWordLib(HanZi_Shang,buf); Display_HanZi(buf); } else if(DisplayWordCode == 3) { GetNewWordLib(HanZi_Hai,buf); Display_HanZi(buf); } } delay(1000); } void Display_HanZi(uint8_t *str) //显示汉字程序 { uint8_t j,k; uint8_t temp; for(k=0;k<32;k++) { temp = str[31-k]; for(j=0;j<8;j++) { if(temp & 0x80) { strip.setPixelColor(k*8+j, strip.Color(0, 0, 1)); } else { strip.setPixelColor(k*8+j,strip.Color(0, 0, 0)); } temp<<=1; strip.show(); } } } void GetNewWordLib(const uint8_t *src,uint8_t *dst) //修正汉字码库 { //调整汉字库部分,对程序分析无用,代码忽略 } //蓝牙串口接收函数 void serialEvent() {//能够正确接收蓝牙数据并判断接收到的是哪个汉字,代码忽略 } //判断蓝牙接收到的汉字码,能够正确识别 void DisplayCodeJudge(void) { if((WordBuf[1] == 0xA1) && (WordBuf[2] == 0xA5)) { DisplayWordCode = 1; } else if((WordBuf[1] == 0xB8) && (WordBuf[2] == 0x8A)) { DisplayWordCode = 2; } else if((WordBuf[1] == 0xB5) && (WordBuf[2] == 0xB7)) { DisplayWordCode = 3; } else { // DisplayWordCode = 0; } } 实物图为: ![]() ![]() ![]() |







比如, 这个问题可以拆分成:
1. 蓝牙能不能正常的获取从手机上发送的中文字符.
2. Arduino能否正确的判断中文或英文字符是否正确.
3. 所需要显示的中文字符能否正常显示.
如果说完成了上述三点, 基本上程序就不会有问题了 :)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800); 和
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
感觉这两个定义不能同时定义,Adafruit_NeoMatrix matrix 把这取消后,就正常了。
另外现在有另外一个问题,就是程序占用的空间显示只有20-30%,但是我多加几个字显示就没法了。但是程序又是正常运行的。哎