This is my code.

#include <U8glib.h> 
U8GLIB_SSD1306_128X64 u8g(12, 11, 8, 9, 10);
void clear_screen();
const int pageCount = 1;
int p;
void (*pages[pageCount])() = {clear_screen};
int duration [pageCount] = {2000};
void setup() {
  p = 0;


void loop()
  do {  
  } while( u8g.nextPage() );
  p = p+1;
  if (p == pageCount)
void clear_screen()
u8g.drawStr( 0, 20, "BP");

This is the output is a floating text which says BP starts at 20 y length and progresses towards the right after every page refresh. and moves 20 y length down as soon as it reaches the end of the OLED Check this video out. Video to the Error

  • 1
    I don't know the answer, but it's common to use the module (%) operator in p = p+1; if (p == pageCount) p=0;. So you get p = (p + 1) % pageCount; Feb 11 at 11:28
  • I have run your code, removing the (12, 11, 8, 9, 10) portion, because the display I used is I2C. It does not show the behaviour you describe. It shows "BP" in the upper-left corner where it remains indefinitely.
    – timemage
    Feb 11 at 16:20
  • Do you understand how the code really work? Why do you call the function clear_screen while it is actually draw a string? why the need to use function pointer (*pages[p])(); when it can simply call clear_screen()? I don't use u8glib but I can tell from the code that it will always draw the string at fix location at 0, 20 as @timemage point out, if you want to screen moving across the screen, you need to pass-in a variable u8g.drawStr( 0, y, "BP");.
    – hcheung
    Feb 12 at 1:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.