我正在尝试在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/