Преодоление проблем с экраном 0.96 128X64 OLED LCD I2C SSD1306

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

А для этого нужна инструкция в стиле "разрешенный коридор от и до. Дальше сам дурак"

Правда, ее все равно будут чить потом, когда ничего не работает. %)

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Интерфейс библиотеки должен быть простой, понятный, и по возможности не допускающий неправильного использования.

В случае неправильного использования юзер должен получать несильный. но неприятный удар током :)

Gomez
Offline
Зарегистрирован: 09.09.2017

andriano пишет:

В последней версии (0.4) для изменения ориентации служат две функции:

  void SetNormalOrientation(); // pins on top 
  void SetTurnedOrientation(); // pins on bottom 

О, есть 0.4, оказывается!? Спасибо!

vdm
vdm аватар
Offline
Зарегистрирован: 29.08.2016

Чтобы не спамить лишние темы, спрошу тут. :)

Как можно подключить, если можно, данный дисплей через другие пины, а не А4 и А5?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Аппаратный I2C только на пинах А4 и А5. Единственный выход - городить программный I2C на других пинах.

vdm
vdm аватар
Offline
Зарегистрирован: 29.08.2016

Jeka_M пишет:

Аппаратный I2C только на пинах А4 и А5. Единственный выход - городить программный I2C на других пинах.

Понял, печально...

Sergey_d
Offline
Зарегистрирован: 12.07.2019

Увеличение шрифта до 32х32:

Добавить в OzOLED.h:

	void printChar32(char c, byte X=255, byte Y=255);
	void printString32(const char *String, byte X, byte Y, byte numChar=255);
	void setCursorXY32(byte Column, byte Row);
	void sendChar(const char *String, byte X, byte Y);

Добавить в OzOLED.cpp:

void OzOLED::printChar32(char C, byte X, byte Y){
    if(C < 32 || C > 127)
        C='*';
    unsigned int m = 0;
    unsigned char row0[8];
    unsigned char row1[8];
    unsigned char row2[8];
    unsigned char row3[8];
    for ( byte i=0; i<8; i++) {
        m = EnlardeByte2Word(pgm_read_byte(&BasicFont[C-32][i]));
        unsigned int a = 0;
        unsigned int b = 0;
        a = EnlardeByte2Word(lowByte(m));
        b = EnlardeByte2Word(highByte(m));
        row0[i] = lowByte(a);
        row1[i] = highByte(a);
        row2[i] = lowByte(b);
        row3[i] = highByte(b);
    }
    sendChar(row0, X, Y);
    sendChar(row1, X, Y+1);
    sendChar(row2, X, Y+2);
    sendChar(row3, X, Y+3);
}

void OzOLED::sendChar(const char *String, byte X, byte Y) {
    setCursorXY32(X, Y);
    for(byte i=0; i<8; i++) {
        sendData(String[i]);
        sendData(String[i]);
        sendData(String[i]);
        sendData(String[i]);
    }
}

void OzOLED::printString32(const char *String, byte X, byte Y, byte numChar){
    byte count=0;
    while(String[count] && count<numChar){
        printChar32(String[count++], X, Y);
        X += 2;
    }
}

void OzOLED::setCursorXY32(byte X, byte Y){
    sendCommand(0x00 + (8*X & 0x0F));
    sendCommand(0x10 + ((16*X>>4)&0x0F));
    sendCommand(0xB0 + Y);
}

Использование:

OzOled.printString32("123",1,2);