Some of the methods for the u8glib library (Google it to find/download) are:
lcd.begin(); // reset display and put in default state lcd.enableCursor(); // cursor visible lcd,disableCursor(); // cursor not visible (default state) lcd.setCursorPos(x, y); // cursor to x, y lcd.setColorIndex(col); // BW on = 1, off = 0 lcd.drawBitMap(x, y, cnt, h, *bitmap); // draw bit map of cnt bytes // width is cnt * 8 // at x, y (top left) height h lcd.drawBox(x, y, w, h); // filled box at x, y. width w, height h // fill set by color index lcd.drawCircle(x, y, rad, opt); // x, y centre, radius rad, // opt is option to draw part circle // U8G_DRAW_UPPER_RIGHT, ...LEFT, // ... LOWER_LEFT, ... RIGHT, ...ALL lcd.drawDisk(x, y, rad, opt); // as above but filled circle lcd.drawFrame(x, y, w, h); // frame at x, y width w height h lcd.drawRFrame(x, y, w, h, r); // rounded frame, edges radius r lcd.drawHLine(x, y, w); // draw horizontal line from x,y width w lcd.drawVLine(x, y, h); // draw vertical line from x, y height h lcd.drawLine(x1, y1, x2, y2,); // draw line from x1, y1 to x2, y2 lcd.drawTriangle(x1, y1, x2, y2, x3, y3); // filled triangle lcd.drawPixel(x, y); // pixel at x, y lcd.setFont(*font); // sets font - see table below lcd.getStrWidth(*s); // returns string width in pixels in current font lcd.drawStr(x, y, *s); // string at x, lower left of font characters lcd.firstPage(); // starts a “picture loop” lcd.nextPage(); // marks end of “picture loop”, returns 0 if finished
x = col, y = row down from the top left 0, 0 of the LCD. Images (like boxes) draw w = right, h = down from the index x, y. f
For an 128 x 64 display using the ST7920 controller chip an object can be created very simply with
#include “u8glib.h” U8GLIB_ST7920_128X64_1X lcd(SCK, MOSI, CS); // lcd object
where SCK, MOSI & CS are the standard Arduino Uno SPI bus signals - see code below for connections. Note that display PSB must be GND for serial SPI bus operation.
Code
// QC12864B display using ST7920, with built in pot "VR" for adjusting VO // LCD connections VSS - GND, VDD - 5V, RS - 10, RW - 11, E - 13, PSB - GND, A - 120R - 5V, K - GND // sonar Trig 8, Echo 9 #include "U8glib.h" #include "NewPing.h" // SPI SCK, MOSI & SS #define EN 13 #define RW 11 #define CS 10 // sonar #define TRIG 8 #define ECHO 9 #define MAXDIST 200 // display set up, bar, line position length, caption position #define BARWDTH 5 #define BARHT 10 #define LINEX1 2 #define LINEY1 50 #define LINELEN 120 #define CAPY1 10 // lcd object U8GLIB_ST7920_128X64_1X lcd(EN, RW, CS); // SCK = EN D13, MOSI = RW D11, SS = CS D10 // sonar object NewPing sonar(TRIG, ECHO, MAXDIST); void setup(void) { lcd.begin(); // init display lcd.setRot180(); // flip screen } void loop(void) { unsigned int barht; // bar height = number of echos (0-50) unsigned int barecho; // echo distance (0 to 120-BARWDTH) = 50 unsigned cm; // echo return char cmbuf[4]; // echo return in ASCII cm = sonar.ping_cm(); // get distance echo sprintf(cmbuf, "%d", cm); // convert to ASCII barecho = map(cm, 0, MAXDIST, LINEX1, LINEX1 + LINELEN); // scale cm to line len barht = BARHT; // set bar height // picture loop lcd.firstPage(); do { lcd.setFont(u8g_font_helvR08); // font height "A" of 8 pixels, 2 rows "g" descenders lcd.drawStr(LINEX1, CAPY1, "Echo distance measurement"); // col 2 row 8, text bottom left is on row lcd.drawStr(40, CAPY1 + 11, cmbuf); lcd.drawStr(60, CAPY1 + 11, "cm"); lcd.drawLine(LINEX1, LINEY1, LINEX1 + LINELEN, LINEY1); // base line lcd.drawStr(LINEX1, LINEY1 + 10, "0"); // scale numbers lcd.drawStr(LINEX1 + LINELEN - 16, LINEY1 + 10, "200"); lcd.drawBox(LINEX1 + barecho, LINEY1 - barht, BARWDTH, barht); } while(lcd.nextPage()); // rebuild the picture after some delay delay(500); }