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;
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;
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 == 0xA1) && (WordBuf == 0xA5))
{
DisplayWordCode = 1;
}
else if((WordBuf == 0xB8) && (WordBuf == 0x8A))
{
DisplayWordCode = 2;
}
else if((WordBuf == 0xB5) && (WordBuf == 0xB7))
{
DisplayWordCode = 3;
}
else
{
// DisplayWordCode = 0;
}
}
实物图为:
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提问的最简代码. 这样才能够方便小伙伴们帮你解决问题.
比如, 这个问题可以拆分成:
1. 蓝牙能不能正常的获取从手机上发送的中文字符.
2. Arduino能否正确的判断中文或英文字符是否正确.
3. 所需要显示的中文字符能否正常显示.
如果说完成了上述三点, 基本上程序就不会有问题了 :)
Angelo 发表于 2017-9-27 15:25
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提 ...
你好,代码是的确比较长但是仔细看之后,其实就很简单的几个模块,呵呵
关于你的问题:
1、蓝牙接收正常,可以区分从手机发送的汉字编码;
2、Arduino能够正确区分中文编码具体是哪个汉字;
3,中文单独能够显示,但是需要我程序里面的DisplayWordCode变量在loop函数中固定一个值,比如DisplayWordCode=1,就显示第一个汉字,DisplayWordCode=2就显示第二个汉字,以此类推,但是当我把DisplayWordCode做为一个变量,根据蓝牙接收的汉字来赋值的话,则不能显示汉字,另外DisplayWordCode在setup中赋值的话,主程序中能识别具体是那个数据,但是显示屏不显示。谢谢 Angelo 发表于 2017-9-27 15:25
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提 ...
这个分析的有道理 Sino 发表于 2017-9-27 15:49
你好,代码是的确比较长但是仔细看之后,其实就很简单的几个模块,呵呵
关于你的问题:
1、蓝牙接收正 ...
了解了.
现在的问题是已经正确的接收到了蓝牙的数据, 但是没办法正确的处理这些数据.
可以在处理蓝牙数据的结果处, 通过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%,但是我多加几个字显示就没法了。但是程序又是正常运行的。哎
页:
[1]