OLED дисплей ssd1306. Как отразить изображение

brainrom
Offline
Зарегистрирован: 04.04.2018

Изучал даташит, как перевеннуть изображение понял, но не могу понять, как поменять местами право и лево. Подскажите, в какую сторону копать. Оптические методы не подходят.

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

да в принципе это несложно. Открываете библиотеку, находите функцию вывода символа, что-то типа printChar - и меняете везде координату x на (128-x)

brainrom
Offline
Зарегистрирован: 04.04.2018

Дисплей же графический всё же. Т. е. Мне не символ первый и последний надо менять, а всё изображение. Стандартных решений точно нет? Видимо, придется ломать библиотеку таким образом, чтобы она свой массив с другого конца заполняла. Кстати, какую именно библиотеку посоветуете? Их разных много, функционал везде примерно одинаковый.

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

brainrom пишет:
Дисплей же графический всё же. Т. е. Мне не символ первый и последний надо менять, а всё изображение. Стандартных решений точно нет? Видимо, придется ломать библиотеку таким образом, чтобы она свой массив с другого конца заполняла.

Конечно, графический. Поэтому я вам написал. что инвертировать картинку нужно попиксельно. Всего на этом дисплее по оси Х 128 пикселей - поэтому я и пишу. что коррдинату Х нужно перевести в 128-Х.

Что такое  "стандартные" решения?  Это вы имеете в виду готовую функцию в библиотеке? - поищите, может в какой-то и есть. Я не искал, мне было бы проще самому написать.

brainrom
Offline
Зарегистрирован: 04.04.2018

Решение найдено. В библиотеке Adafruit SSD1306 в функции drawPixel, начиная со строки 119, идет описание работы со смещением пикселей. Там надо уже просто подобрать. Всем спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

brainrom, если мне не изменяет память, контроллер 1306 дисплея позволяет независимо менять изображение на зеркальное как по вертикали, так и по горизонтали. Безо всякого вмешательства в библиотеки. В дэйташите есть табличка.

brainrom
Offline
Зарегистрирован: 04.04.2018

Я лично в даташите только нашел по вертикали. С вертикалью связанное было только First Column и Last Column. Если не так, то ткните как это должно называться.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Сейчас лень лезть в дэйташит, посмотрел свою библиотечку. Там переворот экрана делается двумя командами, одна из которых отражает по вертикали, а другая - по горизонтали. Где какая - не помню.

И еще имейте в виду, что нормальная ориентация дисплея с точки зрения кодописателей Ардуино соответствует "вверх ногами"! с точки зрения разработчиков железа.

В общем, Вам нужна одна из 4-х команд, какая - разбирайтесь сами.

Фрагмент из моей библиотеки:

void ASOLED::SetNormalOrientation() { // pins on top 
    LD.sendCommand(0xA1);
    LD.sendCommand(0xC8);
}

void ASOLED::SetTurnedOrientation() { // pins on bottom
    LD.sendCommand(0xA0);
    LD.sendCommand(0xC0);
}

 

Chudo-Judo
Offline
Зарегистрирован: 07.03.2022

brainrom пишет:
Изучал даташит, как перевеннуть изображение понял, но не могу понять, как поменять местами право и лево. Подскажите, в какую сторону копать. Оптические методы не подходят.

И как же перевернуть изображение на 180 градусов ?