U8gLib是一个驱动128 64 OLED之类液晶屏的一个Arduino库。
启用I2C用例程点亮液晶屏之后就开始着手写自己的程序来显示内容了。
于是写了下边一段程序来显示从上往下滚动显示的文字:
#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // 构造函数,不同的Oled芯片使用的构造函数不同
int y_pos = 0;
void draw(void) {
u8g.drawStr( 0, y_pos, "Dark World!");
}
void setup(void) {
u8g.setColorIndex(1); // pixel on
u8g.setFont(u8g_font_unifont);
u8g.setFontPosTop();
}
void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
y_pos==64?y_pos=0:y_pos++;
}
翻了下Wiki,使用U8gLib有以下注意事项:
1、不要在draw()过程中修改任何全局变量的值
2、不要在draw()过程内部声音任何静态变量
3、在draw()过程的开始呈现一个空屏幕
4、像draw color或者当前font等变量值应当在draw()过程开始进行设置
5、像draw color或者当前font等变量值如果在picture loop中没有改变的话,可以在picture loop之外进行声明
在写程序之前没有注意第二点,在draw()内部声明了一个变量,进行循环,结果显示异常,最后翻了翻Wiki才发现需要注意第二点。
u8glib的picture loop非常特别
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
必须在loop中加这么一个picture loop,循环可以写在后边。
最终效果:
|