128x32 için bir library toparladım. Fakat bir problem var.
Genelde örnekler bir buffer oluşturup buffer üzerinde değişiklik yaptıktan sonra ekranı yenileyerek yapılmış.
Bende bu şekilde devam ettim.
Fonksiyona Mesaj, x, y şeklinde değer giriyorum fakat x parametresi doğru çalışmasına rağmen y parametresi doğru çalışmıyor.
(Bu fonksiyonları internetten buldum)
void OLED_WriteCharTest(uint8_t c, uint8_t x, uint8_t y)
{
uint8_t i;
uint16_t table_offset = (c - 32)*5;
uint16_t offset = y*16 + x;
for(i = 0; i < 5; i++)
oled_buffer[i+offset] = Font_5x7[i+table_offset];
OLED_WriteBuffer(oled_buffer);
}
void OLED_WriteStringTest(uint8_t *s, uint8_t x, uint8_t y)
{
uint8_t _x = x;
while(*s)
{
OLED_WriteCharTest(*s++, _x, y);
_x += 7; // 5 olması gerek fakat güzel gözüksün diye 7 yapıldı
}
}
Örnek
OLED_WriteStringTest("BARAN", 0, 0);
OLED_WriteStringTest("EKREM", 0, 10);
Çıktı;
(https://resmim.net/f/JbZv4Z.jpeg)
Y değerini 0 dan farklı yaptığımda mesaj sağa doğru kayıyor. Sebebi ne olabilir ?
Ne hikmetse saniyeler içinde sorun çözüldü. :D
void OLED_WriteCharTest(uint8_t c, uint8_t x, uint8_t y)
{
uint8_t i;
uint8_t _y = y % 8; // bunu unutmamak lazım.
uint16_t table_offset = (c - 32)*5;
uint16_t offset = (y - _y)*16 + x;
for(i = 0; i < 5; i++)
oled_buffer[i+offset] = Font_5x7[i+table_offset];
OLED_WriteBuffer(oled_buffer);
}