U8GLib ile Arduino UNO üzerinden I2C OLED'e fotoğraf yüklemek
Evet fotoğraf. Çocukluk fotoğrafınız, lise yıllığındaki fotoğrafınız... :) Ancak OLED, yalnızca monochrome desteklemekte. Fakat renkli ya da renksiz fotoğraflarımızı da, OLED için uygun formata dönüştürebiliriz. Elbette bu dönüşüm sonrasında, OLED üzerinde gördüğünüz şeyi ne kadar kendinize benzetebilirsiniz orası da muamma. Bu yüzden bu yapacağımız işlem, siyah beyaz ya da siyah beyaza yakın resimlerde daha gerçekçi sonuçlar üretmekte.
Öncelikle eğer U8GLib ile başlangıç uygulamasını yapmadıysanız, önce Merhaba Dünya
uygulamasına bir göz atın, daha sonra buraya dönün.
Gerekli uygulamalar:
- Paint : Normal paint
- Paint.NET : monochrome çevrimi için kullanacağız.
- imagen: fotoğrafı 128*64'e dönüştürmek için
- LCDAsistant: monochrome fotoğrafı OLED'in anlayacağı koda dönüştürmek için
Elbette bu işlemler için kendi kullandığınız uygulamaları da kullanmaya devam edebilirsiniz.
Dediğim gibi her türlü fotoğraf kullanılabilir ancak elbette ayrıntısı düşük, siyah beyaz fotoğraflar çok daha güzel sonuçlar veriyor. Ben siyah beyaz imza fotoğrafını seçtim.
Öncelikle fotoğrafımız eğer 2x1 ebatlarında değilse, (örneğin 720360, 412206, 1500*750 vs.) fotoğrafı bu boyutlara çekelim. Seçtiğim fotoğraf 640x360 boyutlarına sahip. Benim bunu ya 640x320 ya da 720x360'a çekmem lazım öncelikle. Normal paint'i kullanarak fotoğrafımı 720x360 boyutlarına çektim.
Şimdi de imagen kullanarak 720x360'lık fotoğrafı OLED'in boyutlarına yani 128x64'e çekelim. Imagen üzerine sağ tıklayalım ve Image>Resize>Change Size
menüsünde Other kısmına 128x64'ü girelim ve yeni fotoğrafı kaydedelim.
Seçtiğim resim siyah beyaz olsa da aslında halen monochrome değil. Paint.net'i açalım ve Adjustments>Brightness/Contrast>
a tıklayalım. Çıkan menüde Brightness = 0 ve Contrast=100 atayalım ve resmi BMP olarak kaydedelim. Burası çok önemli. Eğer bitmap değil de jpg, png ya da diğer biçimleri seçersek ekranda istediğimiz sonuçları göremeyeceğiz. Bitmap olarak kaydettikten sonra Paint.NET'i kapatabiliriz.
Bir sonraki adımımızda LCDAsistant'ı açalım ve kaydettiğimiz bmp dosyasını seçelim. Byte Orientation kısmında "Horizontal" seçimini yapmak önemli, aksi taktirde fotoğraf ekranda bozuk olarak basılacaktır. Save output komutuyla dosyamızı txt biçimiyle kaydedelim ve bu kodu kopyalayalım ilgili değişkene yapıştıralım.
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
const uint8_t ATATURK[] 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, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x30, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xC0, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x48, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0x48, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0xC0, 0x02, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x06, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x80, 0x04, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x80, 0x21, 0xCC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xC0, 0x80, 0x69, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x80, 0x31, 0x81, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x02, 0x31, 0x00, 0x40, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x98, 0x01, 0x12, 0x21, 0x00, 0x20, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x01, 0xE0, 0x01, 0x34, 0x20, 0x00, 0x18, 0x00, 0x00,
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3A, 0x03, 0x80, 0x02, 0x24, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x61, 0x47, 0x00, 0x02, 0x66, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0xC3, 0x8F, 0x07, 0x02, 0xB0, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x00, 0x18, 0x04, 0x00, 0x01, 0x83, 0xAE, 0x04, 0x84, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x30, 0x08, 0x00, 0x03, 0x03, 0x0A, 0x09, 0x83, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x20, 0x08, 0x00, 0x02, 0x03, 0x02, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x60, 0x10, 0x00, 0x04, 0x07, 0x14, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x40, 0x20, 0x00, 0x08, 0x06, 0x04, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0xC0, 0x40, 0x00, 0x18, 0x0E, 0x24, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x80, 0x80, 0x00, 0x30, 0x0E, 0x0C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x01, 0x81, 0x00, 0x00, 0x20, 0x1C, 0x48, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x01, 0x02, 0x00, 0x00, 0x60, 0x14, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x03, 0x06, 0x00, 0x00, 0x40, 0x34, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x06, 0x0C, 0x00, 0x00, 0x40, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x07, 0xFF, 0x00, 0x00, 0x80, 0x69, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x1C, 0x30, 0xC0, 0x00, 0x80, 0x42, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x68, 0xC0, 0x20, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x99, 0x80, 0x10, 0x01, 0x01, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x01, 0x1E, 0x00, 0x08, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x02, 0x38, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x01, 0xE0, 0x00, 0x04, 0x43, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x04, 0xC2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x80, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x02, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x02, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x30, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x11, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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
};
void drawBitmap() {
u8g.drawBitmapP( 0, 0, 16, 64, ATATURK);
}
void setup(void) {
}
void loop(void) {
u8g.firstPage();
int i = 0;
do {
drawBitmap();
} while( u8g.nextPage() );
delay(1000);
}
Sonuçlar harika: