2017-9-27 11:15:06 [显示全部楼层]
5918浏览
查看: 5918|回复: 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;
        }
}
实物图为:
Bluno Beetle 开发板显示16*16汉字求助图1Bluno Beetle 开发板显示16*16汉字求助图2Bluno Beetle 开发板显示16*16汉字求助图3






Angelo  初级技匠

发表于 2017-9-27 15:25:25

Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提问的最简代码. 这样才能够方便小伙伴们帮你解决问题.

比如, 这个问题可以拆分成:
1. 蓝牙能不能正常的获取从手机上发送的中文字符.
2. Arduino能否正确的判断中文或英文字符是否正确.
3. 所需要显示的中文字符能否正常显示.

如果说完成了上述三点, 基本上程序就不会有问题了 :)

回复

使用道具 举报

Sino  见习技师
 楼主|

发表于 2017-9-27 15:49:55

Angelo 发表于 2017-9-27 15:25
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提 ...

你好,代码是的确比较长  但是仔细看之后,其实就很简单的几个模块,呵呵
关于你的问题:
1、蓝牙接收正常,可以区分从手机发送的汉字编码;
2、Arduino能够正确区分中文编码具体是哪个汉字;
3,中文单独能够显示,但是需要我程序里面的DisplayWordCode变量在loop函数中固定一个值,比如DisplayWordCode=1,就显示第一个汉字,DisplayWordCode=2就显示第二个汉字,以此类推,但是当我把DisplayWordCode做为一个变量,根据蓝牙接收的汉字来赋值的话,则不能显示汉字,另外DisplayWordCode在setup中赋值的话,主程序中能识别具体是那个数据,但是显示屏不显示。谢谢
回复

使用道具 举报

hnyzcj  版主

发表于 2017-9-27 19:16:50

Angelo 发表于 2017-9-27 15:25
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提 ...

这个分析的有道理
回复

使用道具 举报

Angelo  初级技匠

发表于 2017-9-28 16:22:36

Sino 发表于 2017-9-27 15:49
你好,代码是的确比较长  但是仔细看之后,其实就很简单的几个模块,呵呵
关于你的问题:
1、蓝牙接收正 ...

了解了.
现在的问题是已经正确的接收到了蓝牙的数据, 但是没办法正确的处理这些数据.

可以在处理蓝牙数据的结果处, 通过Serial.println()进行判断, 看看蓝牙的数据是否真得转化成中文字符数据了.

如果发现没有转化成功, 看看负责转化的函数是不是有问题, 并且通过Serial.println()打印出当前的蓝牙数据, 看看是否和对应的条件判断匹配.



回复

使用道具 举报

Sino  见习技师
 楼主|

发表于 2017-9-30 12:52:37

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%,但是我多加几个字显示就没法了。但是程序又是正常运行的。哎
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail