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;
        }
}
实物图为:
Bluno Beetle 开发板显示16*16汉字求助图1Bluno Beetle 开发板显示16*16汉字求助图2Bluno Beetle 开发板显示16*16汉字求助图3






创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
20060606
20060606
是不是用的库有问题
Angleo
Angleo
Hi 由于代码很长, 即使有大神能够看懂, 也需要花很长时间, 我建议把代码拆分成最小, 并且最能体现你想要提问的最简代码. 这样才能够方便小伙伴们帮你解决问题.
比如, 这个问题可以拆分成:
1. 蓝牙能不能正常的获取从手机上发送的中文字符.
2. Arduino能否正确的判断中文或英文字符是否正确.
3. 所需要显示的中文字符能否正常显示.
如果说完成了上述三点, 基本上程序就不会有问题了 :)
青出于蓝
青出于蓝回复Sino
建议加个SD卡读取模块来存储模型,我掌控板加上SD卡模块后能显示一千张图片,大约1M左右的数据。
Sino
Sino
作者
回复Angleo
你好 你说的方式我都尝试过的 ,问题找到了
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%,但是我多加几个字显示就没法了。但是程序又是正常运行的。哎
共5条回复,已加载2条,点击查看更多共5条回复,已加载全部
- 没有更多了 -