есть функции, printString и printNumber. Они, сопсно, и выводят все что угодно душе. Можно сначала temp преобразовать в строку и вывести через printString, а если она имеет тип int то вывести можно через printNumber. В тексте биб-ки можно подсмотреть парамеьры
есть функции, printString и printNumber. Они, сопсно, и выводят все что угодно душе. Можно сначала temp преобразовать в строку и вывести через printString, а если она имеет тип intто вывести можно через printNumber. В тексте биб-ки можно подсмотреть парамеьры
small, посмотрите, там есть скетч с примерами Test_ASOLED.ino, там показано, как выводить числа, строки, битмапы, спрайты и даже простейший вид диаграммы.
Вернулся к этой библе.
Ребята, несколько вопросов.
Какая версия самая последняя и где взять?
Научилась ли библа выводить String или дальше приходится делать преобразование в массив char?
Как и чем нарисовать пару символов. Редактор на первых страницах не подходит, нет у меня MS Excel, есть OpenOffice, и в нем он не работает. Может кто попроще метод объяснить?
Последняя версия 0.4. Собственно, сама тема в "Проектах" была создана только тогда, когда библиотека уже была обсуждена на форуме и в нее внесены исправления.
Функциональность библиотеки расширять не планируется, т.к. одно из основных качеств - компактность. И терять это качество не хочется. Соответственно, поддержка новых типов (в особенности неблагоприятных для использования в микроконтроллерах) не планируется.
Нарисовать пару символов не так просто. В библиотеке для конмактности применена внутренняя нумерация символов, не совпадающая ни с одной кодовой страницей. Поэтому для расширения набора символов нужно править не только массив данных, но и сам код.
Вы уверены, что Вам нужны именно символы? Т.е. они будут обрабатываться и выводиться внутри строки?
Если просто нужны нестандартные значки, то их можно выводить как битмап.
Ну, лично мне на данный момент нужна антеннка и линейка сигнала. И еще парочка мелочей, к примеру полностью заполненное знакоместо, чтобы вывести прогресс.
Жаль конечно, что String не поддерживается, хотя и не критично. А вот флоат вывести мне так и не удалось, вроде команду PrintNumber оформляю правильно, ставлю точность 2 знака, но выводит все равно целое. И хотелось бы средний шрифт, между большим и маленьким. А точно никак сделать шрифт кратным 4, а не 8-ми? Шрифт 10х12 было бы самое то.
Ну, лично мне на данный момент нужна антеннка и линейка сигнала. И еще парочка мелочей, к примеру полностью заполненное знакоместо, чтобы вывести прогресс.
Для того, что Вы перечислили, по логике больше подходит битмап, нежели фонт.
Цитата:
А вот флоат вывести мне так и не удалось, вроде команду PrintNumber оформляю правильно, ставлю точность 2 знака, но выводит все равно целое.
А в демонстрационном примере работает? В чем разница?
Цитата:
И хотелось бы средний шрифт, между большим и маленьким. А точно никак сделать шрифт кратным 4, а не 8-ми? Шрифт 10х12 было бы самое то.
Без буфера - никак. На дисплее можно изменить только 8 смежных пикселей одновременно. Нарисовать часть из них сначала, а часть потом - невозможно. Если у Вас есть в этом необходимость, Вам нужна другая библиотека - с экранным буфером. Это стоит килобайт ОЗУ.
to Andriano: я слегка модифицировал библиотеку - добавил поддержку ESP32 (ESP8266 компилится, но не проверял) и выбор типа дисплея при инициализации библиотеки. Выкладывать в середине форума чужую библиотеку считаю не правильным. Могу переслать тебе, но наверное лучше на гитхаб.
deloed, можете вообще выкинуть все, что касается TWBR - это специфичная для AVR настройка скорости I2C, все должно работать, но не так быстро. Либо заменить этот фрагмент на аналог настройки скорости I2C для выбранного Вами контроллера. Кстати, для Due удается поднять скорость обмена до 2 МГц.
Сруктура битмэпа должна повторять структуру экрана, т.е.:
- высота рисунка должна быть кратна 8,
- первые 4 байта - заголовок аналогичный таковому для шрифта, т.е. первый байт ширина (dx), а второй - высота (dy) в пикселях, третий байт в данном случае смысла не имеет, потому 0xff, а в четвертом - количество кадров изображения: в простейшем случае - 1,
- далее идет сам битмап: в первом байте содержится вертикальный столбец из 8 пикселей - левый верхний. Во втором байте - второй слева верхний, и так - до правого конца битмэпа, т.е. всего dx байтов. Соотвественно, когда мы все их заполонили, это верхние 8 строк растра,
- следующие dx байтов содержат следующие 8 строк растра - аналогично. Всего строк растра - dy штук, байтов в строке битмэпа - (dy/8), а байтов в битмэпе dx*(dy/8), плюс, как упомянуто выше, 4 байта заголовок.
Сруктура битмэпа должна повторять структуру экрана, т.е.:
- высота рисунка должна быть кратна 8,
- первые 4 байта - заголовок аналогичный таковому для шрифта, т.е. первый байт ширина (dx), а второй - высота (dy) в пикселях, третий байт в данном случае смысла не имеет, потому 0xff, а в четвертом - количество кадров изображения: в простейшем случае - 1,
- далее идет сам битмап: в первом байте содержится вертикальный столбец из 8 пикселей - левый верхний. Во втором байте - второй слева верхний, и так - до правого конца битмэпа, т.е. всего dx байтов. Соотвественно, когда мы все их заполонили, это верхние 8 строк растра,
- следующие dx байтов содержат следующие 8 строк растра - аналогично. Всего строк растра - dy штук, байтов в строке битмэпа - (dy/8), а байтов в битмэпе dx*(dy/8), плюс, как упомянуто выше, 4 байта заголовок.
Спасибо. Все получилось.
Подскажите еще пожалуйста. А в вашей библиотеке можно прописать так, что бы одна цифра выводилась на экран в другой системеме координат, тойсть не слева на право задавалось начало цифры, а наоборот с право на лево? Знаете, на подобие команды в обычном Ворде "Выровнять по правому краю".
Но цифру по правому краю выровнять, естественно, можно: для шрифта 6х8 цифру следует выводить в позиции 122, а для шрифта 12х16 - 116.
Что же касается Ворда, то там преимущественно используются шрифты с непостоянной шириной символа, поэтому наличие такой опции действительно сильно облегчает жизнь разработчика, правда, ценой существенного расхода вычислительного ресурса и объема кода. На МК с его скромными ресурсами и моноширинным шрифтом встраивание такой возможности в библиотеку считаю нецелесообразным.
Но цифру по правому краю выровнять, естественно, можно: для шрифта 6х8 цифру следует выводить в позиции 122, а для шрифта 12х16 - 116.
Что же касается Ворда, то там преимущественно используются шрифты с непостоянной шириной символа, поэтому наличие такой опции действительно сильно облегчает жизнь разработчика, правда, ценой существенного расхода вычислительного ресурса и объема кода. На МК с его скромными ресурсами и моноширинным шрифтом встраивание такой возможности в библиотеку считаю нецелесообразным.
Ну вот смотрите. Цифра 859, видите между ней и ее единицей измерения пробел, соответственно если цифра будет четырехзначной, то пробела не будет. Вот хочется, что бы и при трехзначной не было. Цифры соответственно будут динамически меняться. Пока не понял как это сделать?
Если число трехзначное (меньше 1000), выводить с одной позиции, если четырехзначное - с другой.
Это про то, как сделать компактно и для конкретного случая.
Для моноширинного общего случая: Xstart = XleftPosition - NumberOfDigits(myNumber)*symbolWidth;
Для немоноширинного общего случая необходима функция, подсчитывающая длину строки в пикселях. В общем случае эта функция должна содержать цикл. Xstart = XleftPosition - pixelLength("myString");
Т.е. способов много разных, но, на мой взгляд, наиболее предпочтительным выглядит первый - т.е. не писать универсальную функцию, а писать наиболее компактный вариант для каждого конкретного случая.
Если число трехзначное (меньше 1000), выводить с одной позиции, если четырехзначное - с другой.
Это про то, как сделать компактно и для конкретного случая.
Для моноширинного общего случая: Xstart = XleftPosition - NumberOfDigits(myNumber)*symbolWidth;
Для немоноширинного общего случая необходима функция, подсчитывающая длину строки в пикселях. В общем случае эта функция должна содержать цикл. Xstart = XleftPosition - pixelLength("myString");
Т.е. способов много разных, но, на мой взгляд, наиболее предпочтительным выглядит первый - т.е. не писать универсальную функцию, а писать наиболее компактный вариант для каждого конкретного случая.
Все спасибо. Получилось. Сделал просто через if. Если число блоьше 999 то одна начальная позиция, если меньше то другая и все работает.
andriano, не сможете добавить шрифт 24?
1. И сколько строк с таким шрифтом поместится на экран? Две по 7 символов?
2. А это будет не слишком угловато? (у меня мысль - наоборот, сделать "родной" 12х16. Хотя бы для Mega/Due)
В общем - нет, я не думаю, что это целесообразно. Если Вам нужно - исходники в открытом доступе.
Да, две строки устроило бы. К сожалению, я не смог. Это очень сложно сделать?
Попробовал сам сделать. Ширину смог увеличить, но высоту нет.
Здесь высоту увеличил
01
unsigned
int
EnlardeByte3Word(
char
b)
02
{
03
unsigned
int
d = 0;
04
for
(
byte
i = 0; i < 8; i++)
05
{
06
unsigned
int
e = (((unsigned
int
)b) & (1 << i)) << i << i;
07
d = d | e |(e << 1);
08
}
09
return
d;
10
}
но не смог вывести все три части.
Пока сделал как шрифт 18х16.
Библиотека, правил файлы ASOLED.h, ASOLED.cpp
https://yadi.sk/d/B4cXmoa-YPZzDg
1. И сколько строк с таким шрифтом поместится на экран? Две по 7 символов?
2. А это будет не слишком угловато? (у меня мысль - наоборот, сделать "родной" 12х16. Хотя бы для Mega/Due)
В общем - нет, я не думаю, что это целесообразно. Если Вам нужно - исходники в открытом доступе.
Две строки и нужно.
Вроде шрифт получается нормально, даже в варианте 16х18. На фото сравнение с шрифтом 12х16
Помогите, пожалуйста, с высотой!
Высота должна быть кратна 8
Это я знаю, но шрифт 24 уже состоит из трех частей по высоте, 2 части выводятся, а одна нет.
Когда
Wire.write(lowByte(m)^textMode);верхнюю часть.
Wire.write(highByte(m)^textMode);нижнюю часть.
выводится верхние 2 части. Как вывести еще одну?
У меня получается только так! /sites/default/files/u41008/foto.jpg
не подскажите,как с помощью этой библиотеки выводить динамические данные?
дак динамически же
Ну я догадывался...,но не верил
Вот. Теперь догадайся обьяснить, что ты имеешь ввиду, под выражением "динамические данные"
Имеется переменная «temp” ,например. Значение которой меняется в ходе выполнения программы. Требуется выводить ее значение на экран.
Выше уже задавался такой вопрос, но остался без ответа.
есть функции, printString и printNumber. Они, сопсно, и выводят все что угодно душе. Можно сначала temp преобразовать в строку и вывести через printString, а если она имеет тип int то вывести можно через printNumber. В тексте биб-ки можно подсмотреть парамеьры
Подробнее можно? Даже не знаю как смотреть текст библиотеки.
Если темп это температура полученная от датчика, ее ещё как то нужно преобразовать? Как? И как эти преобразования скажутся на быстродействии?
это к автору, он часто сюда заходит
это к автору, он часто сюда заходит
Автор не заявлял в библиотеке никаких функций преобазования температуры. Библиотека совсем не для этого написана.
Ээ. Вы не так поняли товарища, и меня видимо. Объясните пожалуйста как вывести на экран содержание переменной.
На экран можно вывести только целые числа и строки. Все остальные типы переменных нужно предварительно преобразовать в троку.
Вывести можно разным размером шрифта - см. заголовочный файл библиотеки.
На экран можно вывести только целые числа и строки.
Вывсёврети. У Вас еще функция есть
byte printNumber(float float_num, byte prec=6, byte Y=255, byte numChar=255); // current font
Извините за назойливость.Я просто не умею этого-посмотреть заголовочный файл библиотеки.Объясните если не сложно.
А запихнуть эту библиотеку в attiny13 реально?
PS
Под рукой нет контроллера...
А запихнуть эту библиотеку в attiny13 реально?
Нет
На экран можно вывести только целые числа и строки.
Вывсёврети. У Вас еще функция есть
byte printNumber(float float_num, byte prec=6, byte Y=255, byte numChar=255); // current font
Надо будет удалить в следующей версии.
1
Вообще-то я уже не помню, что там есть, а чего нет, поэтому ориентировался на Ваше сообщение:
2
<div
class
=
"quote-msg"
><div
class
=
"quote-author"
><em>DetSimen</em> пишет:</div>
3
4
есть функции, printString и printNumber. Они, сопсно, и выводят все что угодно душе. Можно сначала temp преобразовать в строку и вывести через printString, а если она имеет тип
int
то вывести можно через printNumber. В тексте биб-ки можно подсмотреть парамеьры
5
6
</div>
small, посмотрите, там есть скетч с примерами Test_ASOLED.ino, там показано, как выводить числа, строки, битмапы, спрайты и даже простейший вид диаграммы.
Вернулся к этой библе.
Ребята, несколько вопросов.
Какая версия самая последняя и где взять?
Научилась ли библа выводить String или дальше приходится делать преобразование в массив char?
Как и чем нарисовать пару символов. Редактор на первых страницах не подходит, нет у меня MS Excel, есть OpenOffice, и в нем он не работает. Может кто попроще метод объяснить?
Последняя версия 0.4. Собственно, сама тема в "Проектах" была создана только тогда, когда библиотека уже была обсуждена на форуме и в нее внесены исправления.
Функциональность библиотеки расширять не планируется, т.к. одно из основных качеств - компактность. И терять это качество не хочется. Соответственно, поддержка новых типов (в особенности неблагоприятных для использования в микроконтроллерах) не планируется.
Нарисовать пару символов не так просто. В библиотеке для конмактности применена внутренняя нумерация символов, не совпадающая ни с одной кодовой страницей. Поэтому для расширения набора символов нужно править не только массив данных, но и сам код.
Вы уверены, что Вам нужны именно символы? Т.е. они будут обрабатываться и выводиться внутри строки?
Если просто нужны нестандартные значки, то их можно выводить как битмап.
Ну, лично мне на данный момент нужна антеннка и линейка сигнала. И еще парочка мелочей, к примеру полностью заполненное знакоместо, чтобы вывести прогресс.
Жаль конечно, что String не поддерживается, хотя и не критично. А вот флоат вывести мне так и не удалось, вроде команду PrintNumber оформляю правильно, ставлю точность 2 знака, но выводит все равно целое. И хотелось бы средний шрифт, между большим и маленьким. А точно никак сделать шрифт кратным 4, а не 8-ми? Шрифт 10х12 было бы самое то.
А точно никак сделать шрифт кратным 4, а не 8-ми? Шрифт 10х12 было бы самое то.
Никак, из-за специфики самого экранчика.
Ну, лично мне на данный момент нужна антеннка и линейка сигнала. И еще парочка мелочей, к примеру полностью заполненное знакоместо, чтобы вывести прогресс.
А вот флоат вывести мне так и не удалось, вроде команду PrintNumber оформляю правильно, ставлю точность 2 знака, но выводит все равно целое.
И хотелось бы средний шрифт, между большим и маленьким. А точно никак сделать шрифт кратным 4, а не 8-ми? Шрифт 10х12 было бы самое то.
может есть кто её адаптировал под stm32?
не компилится(
Что выдает?
Насколько я помню, под Arduino Due прилось изменить, кажется, одну строку - повышение частоты обмена с 100 до 400 кГц.
Кстати, дисплей (по крайней мере тот, что у меня) может работать и на 2 МГц.
Как запустить библиотеку на esp?
Как запустить библиотеку на esp?
http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-displeya-128kh64-s-kirillitsei-utf-8?page=1#comment-427764
to Andriano: я слегка модифицировал библиотеку - добавил поддержку ESP32 (ESP8266 компилится, но не проверял) и выбор типа дисплея при инициализации библиотеки. Выкладывать в середине форума чужую библиотеку считаю не правильным. Могу переслать тебе, но наверное лучше на гитхаб.
спасибо, затупил :)
Под esp8266 не компилится.
Tomat7, вы не могли бы скинуть подправленную библиотеку сюда или на почту deleod СОБАКА ya.ru?
Под esp8266 не компилится.
что не компилится?
http://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-...
ASOLED.cpp отредактировать "точно" как в сообщении по ссылке, а потом заменить
defined(ESP32)
наdefined(ESP8266)
Чтобы скомпилить пример идущий с библиоткой нужно подредактировать mice.c так же, как и a_Small_Rus.c
deloed, можете вообще выкинуть все, что касается TWBR - это специфичная для AVR настройка скорости I2C, все должно работать, но не так быстро. Либо заменить этот фрагмент на аналог настройки скорости I2C для выбранного Вами контроллера. Кстати, для Due удается поднять скорость обмена до 2 МГц.
Спасибо, коллеги :)
Доброго времени суток. Подскажите пожалуйста как сконвертировать рисунок для этой чудной библиотеке? То как делал на U8glib, не работает.
Спасибо!
Сруктура битмэпа должна повторять структуру экрана, т.е.:
- высота рисунка должна быть кратна 8,
- первые 4 байта - заголовок аналогичный таковому для шрифта, т.е. первый байт ширина (dx), а второй - высота (dy) в пикселях, третий байт в данном случае смысла не имеет, потому 0xff, а в четвертом - количество кадров изображения: в простейшем случае - 1,
- далее идет сам битмап: в первом байте содержится вертикальный столбец из 8 пикселей - левый верхний. Во втором байте - второй слева верхний, и так - до правого конца битмэпа, т.е. всего dx байтов. Соотвественно, когда мы все их заполонили, это верхние 8 строк растра,
- следующие dx байтов содержат следующие 8 строк растра - аналогично. Всего строк растра - dy штук, байтов в строке битмэпа - (dy/8), а байтов в битмэпе dx*(dy/8), плюс, как упомянуто выше, 4 байта заголовок.
Сруктура битмэпа должна повторять структуру экрана, т.е.:
- высота рисунка должна быть кратна 8,
- первые 4 байта - заголовок аналогичный таковому для шрифта, т.е. первый байт ширина (dx), а второй - высота (dy) в пикселях, третий байт в данном случае смысла не имеет, потому 0xff, а в четвертом - количество кадров изображения: в простейшем случае - 1,
- далее идет сам битмап: в первом байте содержится вертикальный столбец из 8 пикселей - левый верхний. Во втором байте - второй слева верхний, и так - до правого конца битмэпа, т.е. всего dx байтов. Соотвественно, когда мы все их заполонили, это верхние 8 строк растра,
- следующие dx байтов содержат следующие 8 строк растра - аналогично. Всего строк растра - dy штук, байтов в строке битмэпа - (dy/8), а байтов в битмэпе dx*(dy/8), плюс, как упомянуто выше, 4 байта заголовок.
Спасибо. Все получилось.
Подскажите еще пожалуйста. А в вашей библиотеке можно прописать так, что бы одна цифра выводилась на экран в другой системеме координат, тойсть не слева на право задавалось начало цифры, а наоборот с право на лево? Знаете, на подобие команды в обычном Ворде "Выровнять по правому краю".
Про систему кординат, честно говоря, не понял.
Но цифру по правому краю выровнять, естественно, можно: для шрифта 6х8 цифру следует выводить в позиции 122, а для шрифта 12х16 - 116.
Что же касается Ворда, то там преимущественно используются шрифты с непостоянной шириной символа, поэтому наличие такой опции действительно сильно облегчает жизнь разработчика, правда, ценой существенного расхода вычислительного ресурса и объема кода. На МК с его скромными ресурсами и моноширинным шрифтом встраивание такой возможности в библиотеку считаю нецелесообразным.
Про систему кординат, честно говоря, не понял.
Но цифру по правому краю выровнять, естественно, можно: для шрифта 6х8 цифру следует выводить в позиции 122, а для шрифта 12х16 - 116.
Что же касается Ворда, то там преимущественно используются шрифты с непостоянной шириной символа, поэтому наличие такой опции действительно сильно облегчает жизнь разработчика, правда, ценой существенного расхода вычислительного ресурса и объема кода. На МК с его скромными ресурсами и моноширинным шрифтом встраивание такой возможности в библиотеку считаю нецелесообразным.
Ну вот смотрите. Цифра 859, видите между ней и ее единицей измерения пробел, соответственно если цифра будет четырехзначной, то пробела не будет. Вот хочется, что бы и при трехзначной не было. Цифры соответственно будут динамически меняться. Пока не понял как это сделать?
Если число трехзначное (меньше 1000), выводить с одной позиции, если четырехзначное - с другой.
Это про то, как сделать компактно и для конкретного случая.
Для моноширинного общего случая: Xstart = XleftPosition - NumberOfDigits(myNumber)*symbolWidth;
Для немоноширинного общего случая необходима функция, подсчитывающая длину строки в пикселях. В общем случае эта функция должна содержать цикл. Xstart = XleftPosition - pixelLength("myString");
Т.е. способов много разных, но, на мой взгляд, наиболее предпочтительным выглядит первый - т.е. не писать универсальную функцию, а писать наиболее компактный вариант для каждого конкретного случая.
Если число трехзначное (меньше 1000), выводить с одной позиции, если четырехзначное - с другой.
Это про то, как сделать компактно и для конкретного случая.
Для моноширинного общего случая: Xstart = XleftPosition - NumberOfDigits(myNumber)*symbolWidth;
Для немоноширинного общего случая необходима функция, подсчитывающая длину строки в пикселях. В общем случае эта функция должна содержать цикл. Xstart = XleftPosition - pixelLength("myString");
Т.е. способов много разных, но, на мой взгляд, наиболее предпочтительным выглядит первый - т.е. не писать универсальную функцию, а писать наиболее компактный вариант для каждого конкретного случая.
Все спасибо. Получилось. Сделал просто через if. Если число блоьше 999 то одна начальная позиция, если меньше то другая и все работает.
Не могли бы вы прислть этот скетч на почту, я только начал изучать адруино, некоторые вещи мне не понятны. Спасибо !
rusexpress13@gmail.com
Здравтсвуйте!
Хотелось бы выводить....
String rtut;
LD.printString(rtut,0,0);
А оно ругается,