我正在尝试在arduino以太网上使用u8glib,在第一阶段中,我需要显示一个简单的倒计时,以便以一种非常漂亮的方式显示。测试是否可以及时管理显示。

我必须以毫秒为单位测量变化,例如30ms,因此我需要倒数在50 / 100ms内变化1个单位。

这是oled http://www.seeedstudio.com/wiki/Grove_-_OLED_Display_1.12%22

现在我正在尝试U8glib,因为它集成了很多字体,并且它似乎有据可查。

但是最大的问题是:倒数计时太慢了!在1秒内以1的顺序变化。
我错了吗?我需要换图书馆吗?

谢谢

这是代码

#include "U8glib.h"

U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE);  // I2C

#define MAX_VAL  200
#define MAX_VAL1 250
#define MAX_VAL2 350
#define MAX_VAL3 450
#define MAX_VAL4 500

int current_max_val  = MAX_VAL1;
int currentBB = current_max_val;

char bb_n[4] = {0,0,0,0};
int bb_level = 4;


static int last_bb_n = current_max_val;

void draw(void) {

  int sizev = u8g.getStrWidth(bb_n);
  u8g.drawStr( (48 - (sizev/2)),60,bb_n);

  for(int i=0;i<bb_level;i++){
    u8g.drawTriangle((i*10)+0,90, (i*10)+10,90, (i*10)+5,85);
  }
  last_bb_n = currentBB;
  u8g.drawHLine(0,20, 96);
  u8g.drawHLine(0,70, 96);
}

void setup(void) {

  // flip screen, if required
  //u8g.setRot180();

  // set SPI backup if required
  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
  u8g.setFont(u8g_font_gdb30);
}

void loop(void) {
  // picture loop
  u8g.firstPage();
  count();

  do {
    draw();
  } while( u8g.nextPage() );

}

void count(){
  if(currentBB == 0){
   currentBB = current_max_val;
  }

  itoa(currentBB,bb_n,10);

  if(currentBB >= ((current_max_val/4)*3)){
    bb_level = 4;
  }else if((currentBB < ((current_max_val/4)*3)) && (currentBB >= (current_max_val/4)*2)){
    bb_level = 3;
  }else if((currentBB < ((current_max_val/4)*2))  && (currentBB >= (current_max_val/4))){
    bb_level = 2;
  }else if(currentBB < (current_max_val/4)){
    bb_level = 1;
  }else{
    bb_level = 0;
  }

  currentBB--;

最佳答案

一些优化思路:


使用U8GLIB_SSD1327_96X96_2X_GR
将sizev设置为全局变量,并在count()中计算其值


奥立佛

关于c - U8glib慢速简单测试程序上oled,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24636684/

10-12 02:56