Tools yang saya gunakan:
1. Arduino Nano
2. ISP OLED Display (128x64)
3. GIMP image editor
Bahan citra digital:
Source: http://rs1254.pbsrc.com/albums/hh616/ananiasacts/toyota.png?w=280&h=210&fit=crop
Saya mencoba menampilkan logo Toyota di atas ke display OLED menggunakan Arduino NANO.
Workflow:
1. Siapkan image baru di GIMP dengan ukuran 128x64 (lebarxtinggi)
2. Crop logo diatas (saya hanya mengambil logonya saja)
3. Salin-tempel ke file image yang telah disiapkan sebelumnya
4. Ubah mode image dari RGB menjadi indexed, dengan memilih menu Image->Mode->Indexed
5. Ekspor file tersebut ke dalam bentuk .xbm. Setelah file berhasil di ekspor, buka dengan teks editor dan salin isinya. Screenshot dibawah ini adalah contoh dari file xbm logo toyota.
6. Untuk menampilkan citra digital yang telah di generate dengan GIMP tersebut, tambahkan statement U8G_PROGMEM pada bagian deklarasi variabel. Contoh kode program:
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g( 13, 11, 10, 9, 8 );
#define logo_toyota_width 128
#define logo_toyota_height 64
static unsigned char logo_toyota_bits[] U8G_PROGMEM= {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfc, 0x3f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x80, 0x01, 0x80, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0xe0,
0x07, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf8, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xf8, 0x1f, 0x00, 0x80, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfc,
0x3f, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x3f, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0xfc,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x1f,
0x7c, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
0x0f, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0xf8,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x80, 0x07,
0xe0, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcf,
0x1f, 0x00, 0x80, 0x03, 0xe0, 0x01, 0x00, 0xf8, 0xf3, 0x01, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xc7, 0x3f, 0x00, 0x80, 0x03, 0xc0, 0x01, 0x00, 0xfc,
0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc3, 0x7f, 0x00, 0xc0, 0x03,
0xc0, 0x01, 0x00, 0xfe, 0xe3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x83,
0xff, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0xff, 0xc1, 0x07, 0x00, 0x00,
0x00, 0x00, 0xf0, 0x81, 0xff, 0x03, 0xc0, 0x01, 0xc0, 0x03, 0xc0, 0xff,
0xc1, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0xff, 0x1f, 0xc0, 0x01,
0x80, 0x03, 0xf8, 0xff, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
0xfe, 0xff, 0xc1, 0x01, 0x80, 0x83, 0xff, 0x7f, 0x80, 0x0f, 0x00, 0x00,
0x00, 0x00, 0xf8, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0x1f,
0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xf8, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x1f, 0x00, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0xff, 0xff,
0xff, 0xff, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x3f, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xe0, 0x01,
0x80, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,
0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x80, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
0x00, 0x00, 0xe0, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x07, 0x00, 0x00,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x80, 0x07, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01,
0x00, 0x00, 0xe0, 0x01, 0x80, 0x03, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00,
0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x80, 0x03, 0x00, 0x00,
0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xe0, 0x01,
0xc0, 0x03, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03,
0x00, 0x00, 0xe0, 0x01, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00,
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x03,
0xc0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f,
0x00, 0x00, 0xc0, 0x03, 0xe0, 0x03, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00,
0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0xc0, 0x07, 0xe0, 0x01, 0x00, 0x00,
0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0xc0, 0x07,
0xf0, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
0x00, 0x00, 0x80, 0x0f, 0xf8, 0x01, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x80, 0x1f, 0xfc, 0x01, 0x00, 0x80,
0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x80, 0xff,
0xff, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x07, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xf8,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0xfe,
0x7f, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0xfc, 0x3f, 0x00, 0xe0, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0xfc,
0x1f, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x7f, 0x00, 0xf8, 0x1f, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0xf0, 0x0f, 0xf0, 0x7f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xf0,
0x8f, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 };
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawXBMP( 0, 0, logo_toyota_width, logo_toyota_height, logo_toyota_bits);
}
void setup(void) {
}
void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
// rebuild the picture after some delay
delay(1000);
}
Hasil:
Referensi:
[1] http://forum.arduino.cc/index.php?topic=151669.0