9169| 7
|
[求助] Bluno Beetle 开发板显示16*16汉字求助 |
各位大神好, 我现在做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; } } 实物图为: |
Angelo 发表于 2017-9-27 15:25 你好,代码是的确比较长 但是仔细看之后,其实就很简单的几个模块,呵呵 关于你的问题: 1、蓝牙接收正常,可以区分从手机发送的汉字编码; 2、Arduino能够正确区分中文编码具体是哪个汉字; 3,中文单独能够显示,但是需要我程序里面的DisplayWordCode变量在loop函数中固定一个值,比如DisplayWordCode=1,就显示第一个汉字,DisplayWordCode=2就显示第二个汉字,以此类推,但是当我把DisplayWordCode做为一个变量,根据蓝牙接收的汉字来赋值的话,则不能显示汉字,另外DisplayWordCode在setup中赋值的话,主程序中能识别具体是那个数据,但是显示屏不显示。谢谢 |
Sino 发表于 2017-9-27 15:49 了解了. 现在的问题是已经正确的接收到了蓝牙的数据, 但是没办法正确的处理这些数据. 可以在处理蓝牙数据的结果处, 通过Serial.println()进行判断, 看看蓝牙的数据是否真得转化成中文字符数据了. 如果发现没有转化成功, 看看负责转化的函数是不是有问题, 并且通过Serial.println()打印出当前的蓝牙数据, 看看是否和对应的条件判断匹配. |
Angelo 发表于 2017-9-28 16:22 你好 你说的方式我都尝试过的 ,问题找到了 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%,但是我多加几个字显示就没法了。但是程序又是正常运行的。哎 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed