Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: baran123 - 22 Ocak 2018, 01:07:59

Başlık: 128x32 OLED String Basma Problemi
Gönderen: baran123 - 22 Ocak 2018, 01:07:59
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 ?
Başlık: Ynt: 128x32 OLED String Basma Problemi
Gönderen: baran123 - 22 Ocak 2018, 01:13:47
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);
}