128x32 OLED String Basma Problemi

Başlatan baran123, 22 Ocak 2018, 01:07:59

baran123

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ı;


Y değerini 0 dan farklı yaptığımda mesaj sağa doğru kayıyor. Sebebi ne olabilir ?

baran123

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);
}