Пока не знаю. В самое ближайшее время (т.е. пару-тройку месяцев - точно нет). Если заинтересует - закажу такой, в спонсорской помощи не нуждаюсь. Но что-то в последнее время меня больше заинтересовали цветные дисплеи с параллельным интерфейсом совместно с stm32. Только вот уже накопилось более дюжины дисплеев, а планов по их использованию гораздо меньше.
копатели либы OLED , что посоветуете по горячим следам, как переделать на меньший размер по пикселям ?
либа Ug8lib ug2 есть поддержка i2c
0.42" SSD1306 72*40 0.49" SSD1306 Drive 64*32
но либа выжирает почти всю память , есть компактная как от UTFT и здешняя , но нет поддержки малых разрешений. При пробовании запуска на больших разрешениях, мелкие диспы показываю лабуду.
Мож есть какая легкая либа для малопиксельных, или как эту либу переделать на нужное разрешение?
// есть интерес попробовать сделать уменьшенный вариант Data Glasses Arduino (насадка на технич. очки, проецирует показания перед глазом )
0.49" SSD1306 64*32
Эт с U2G8 , а с вашей либой оказалось норм, черный экран вывода цифр вылечился сдвигом +31,+4
LD.printString_6x8("012345_0000", 31, 4); // первая строчка
Хотел вывести большие цифры int count; , не получилось
1. (думал что либа запоминает шрифт после LD.printString_12x16 )
как понял надо обязательно добывлять (long) для вывода int: LD.printNumber( (long)count , 31, 4); - печатает только мелкий шрифт
2. попробовал через конветрацию , переменная String thisString=" ";
thisString = String(count, DEC); // преобразуем int count в String
LD.printString_12x16( (const)thisString , 31, 4); //в либе подсмотрел что надо const , (String) тож не работает LD.printString_12x16( (string)thisString , 31, 4);
Я хочу вывести часы, минуты и секунды. Получается более одного значения, поэтому и ошибка? И как работает (F(...)); Возможно я не до конца понимаю его принцип действия. Спасибо
Для того, чтобы Вам можно было помочь, надо иметь больше информации. А эту информацию Вы не предоставляете, предпочитая задавать вопросы, но не отвечать на мои.
Чтобы почитать о макросе, наберите в поиске "Arduino PROGMEM".
А вот сможете ли Вы использовать его в своем проекте, я не знаю, т.к. Вы не делитесь информацией, о которой я прошу.
Ну и самое главное - пока у меня нет никаеких оснований думать, что для вашего проекта требуется "больше памяти".
Пробую эту библиотеку на слегка другом дисплее размером 128х32. Столкнулся с тем, что большой шрифт отображается "нормально", а вот 6х8 нет. Я так понял, что обрезается сверху и снизу строка пикселей. И если на большом шрифте этого не заметно, то вот с маленьким не прокатывает. Посоветуете, как это можно решить.
Да либа хорошая и мало занимает . спасибо andriano , все работает, все выводит.
для малых дисплеев просто добавил смещение +.. +.. по горизонтали и вертикали.
или можете исправить в либе , найти где выводится другой шрифт , и поставить там смещение чтоб само добавлялось при выборе этого шрифта.
aledan, дисплея такого у меня нет, поэтому сказать, что и как исправлять, не могу - не на чем проверить свои догадки.
А догадки, надо сказать, не очень приятные: из сравнения того, что пишет slider, и что пишете Вы, могу предположить, что китайцы на матрице 128х32 делают два разных вида дисплея, управлять которыми тоже нужно по-разному.
Собственно, контроллер предусматривает формат экрана 128х64, а в дисплее количество строк вдвое меньше. Т.е. половина строк не должна использоваться. Вопрос в том - какая именно половина. Похоже, что в дисплее slider'а это вторая половина (т.е. строки с 32 по 63), а в Вашем дисплее - через одну (например, все нечетные). Соответственно, и методы борьбы должны быть разными.
Здравствуйте, подскажите, как с помощью вашей библиотеки выводит на экран OLED0.95" динамичесике цифры - если цифра изменяется от 0 до 100 (float), то например если значние изменилось с 85 до 0, значение на экране остается 05, как можно сделать обновление цифры постоянно, не совсем понял как можно работать стипом char? можно пример
хочу сделать типа такой функции, суть такая какое бы не было значение tape к нему добавляется в конце пустое место, думаю будет "затирать хвост" если длинна текста изменится, но в библиотеки нет функции printChar, поэтому и спрашиваю, как можно работать с функцией char, может как то проще это можно сделать?
void drawNum (String tape, int width, int x, int y) {
Yarik_22, в библиотеке есть функция printChar, только она недоступна снаружи. Это сделано специально. Дело в том, что "char" в языке Си - это одно, а в кодировке UTF-8 - совсем другое. И как только мы пытаемся использовать кириллицу, эта разница сразу проявляется. Поэтому функция printChar в общепринятом смысле (для вывода одного символа) применительно к кодировке UTF-8 вообще невозможна.
Библиотека в целях компактронсти не поддерживает ни "String", ни "string", поэтому при обращении к ней следует использовать Си-строки (char*, заканчивающийся нулем). Если параметры, задающие позицию вывода, опустить, очередной символ будет отображаться вслед за предыдущим. Т.е. в Вашем случае вывод должен вцыглядеть как-то так:
воспользовался вашим примером иначе, добавил после изменяемой переменной LD.printString(" "); теперь все затирает как надо, артефактов не остается!!! а так как кроме этого числа на одной строке ни чего нет, то эта функция ни чего лишнего не уберет.
В IDE нажимаю Исправить кодировку и перезагрузить. При этом весь русский тест в скетче (включая коментарии) меняется на кракозябры, исправляю нужные мне строки и загружаю - на экране русский текст.
При этом примеры идущие с библиотекой работают нормально - и в скетче и на экране русские буквы без танцев с бубном.
Когда используете скетчи где есть кириллица, перед загрузкой нужно сохранить скетч (настройки-сохранить), иначе кириллица исчезает и вместо него появляется звездочки или ромбы и тп. Это нужно делать , если после открытия скетча Вы вносили изменения, не важно какие!
И как это исправить? В настройках IDE не нахожу ничего связанного с кодировками
Честно говоря, настройка Arduino IDE - та еще песня: там минимум три текстовых файла конфигурации, причем распределение функций между ними неочевидно.
Я не могу воспроизвести Вашу ситуацию: у меня при создании нового скетча он сразу получается в utf-8. Если нажать "Исправить кодировку", он перекодирует так, как если бы исходный текст был в 1251. Т.е. портит строку. Если я набираю рядом с испорченной новую - она отображается правильно и в дальнейшем все так и работает.
Т.е. я не могу получить режим, чтобы в IDE и на дисплее у меня отображалось по-разному. Соответственно, не могу понять причину проблемы и, следовательно, способо борьбы с нею.
А что если сразу после запуска среды сначала нажимать new, а только потом начинать набирать текст?
Вы попробуйте изменить скетч и загрузить, как я писал. У меня сразу появляются звездочки, как только сохраню, появляется кириллица. И это не только с Вашей библиотекой. И давно я обнаружил это, прочитав где-то почему так происходит, когда сохраняете код получается в utf-8.
Вы попробуйте изменить скетч и загрузить, как я писал.
К сожалению, именно этого Вы и не написали.
Цитата:
У меня сразу появляются звездочки, как только сохраню, появляется кириллица. И это не только с Вашей библиотекой. И давно я обнаружил это, прочитав где-то почему так происходит, когда сохраняете код получается в utf-8.
Из того, что Вы написали, понять, что именно Вы делаете, невозможно. Предполагаю, что вместо того, чтобы создать новый скетч, после чего начать набивать его содержимым, вы загружаете уже готовый (где-то взятый) скетч в неправильной кодировке. В этом случае - просто перекодируйте скетч прежде, чем загружать его в Arduino IDE.
Когда используете скетчи где есть кириллица, перед загрузкой нужно сохранить скетч
Да, действительно помогло! Я изначально в настройках IDE отключил пункт "Сохранять скетч при проверке или компиляции" дабы в случае чего можно было безболезненно вернуться к исходному состоянию. После включения этого пункта все нормально, кирилица отбражается на дисплее без проблем. При этом неважно редактируется уже набранный ранее код или он пишется с нуля.
Теперь еще один вопрос. Правильно ли я понимаю что при использовании шрифта 12x16 строки нужно выводить через одну иначе происходит их наложение,а для шрифтов 6х8 можно подряд? Например
Я изначально в настройках IDE отключил пункт "Сохранять скетч при проверке или компиляции" дабы в случае чего можно было безболезненно вернуться к исходному состоянию. После включения этого пункта все нормально, кирилица отбражается на дисплее без проблем.
Ну т.е., как я и предполагал, дело - в нестандартных настройках IDE. А что именно было нестандартным, извините, угадать не смог.
Цитата:
Теперь еще один вопрос. Правильно ли я понимаю что при использовании шрифта 12x16 строки нужно выводить через одну иначе происходит их наложение,а для шрифтов 6х8 можно подряд? Например
Под строками я в описании подразумевал не последовательности символов на экране (т.е. строки из букв), а физические строки дисплея, имеющие 8 пикселей в высоту (ну так - по строкам - организована видеопамять). Т.е. - да, высота 8-пиксельного шрифта равна одной строке, а 16-пиксельного - двум строкам.
Спасибо, за прикольную библиотеку, полезная штучка, да еще с русскими буквами. :)
С моими таймерами, иногда, намертво вешает контроллер. Не часто, раз в день примерно, хотя иногда может и сутки проработать а иногда минут 15. Полагаю, где-то прерывания между собой конфликтуют. Если таймер останавливаю перед выводом на экран - работает стабильно. :)
Семен, так я немного не об этом. В принципе, wire, вроде, работает с прерываниями, но тогда получается, что Ваши таймеры конфликтуют со стандартной библиотекой Ардуино wire. По-хорошему, с этим бы надо разобраться.
Но для начала я бы порекомендовал закомментировать в моей библиотеке повышение скорости с 100 до 400 кГц (строка "#define I2C_400KHZ1// 0 to use default 100Khz, 1 for 400Khz " в файле asoled.h) и посмотреть, как это скажется на устойчивости работы:
- если частота конфликтов увеличится, значит, Ваши таймеры действительно конфликтуют с wire,
- если конфликты исчезнут, значит, конфликт проявляется только на повышенной скорости, и, знапчит, Ваши таймеры не конфликтуют с wire на обычной скорости,
- если частота проявления конфликтов не изменится, будем думать дальше.
Ну потому и занимает все место, что содержит множество ненужных функций.
Разбиение на строки - совсем не то, что должна делать библиотека дисплея.
Разбиение на строки - совсем не то, что должна делать библиотека дисплея.
Плюсую ;)
Andriano, добрый день!
Спасибо за замечательную библиотеку.
Сейчас на Ali есть 128x128 OLED I2C на SSD1327...
В связи с этим вопрос - есть ли у Вас планы по поддержке дисплеев на SSD1327?
А то уж дюже не хочется на U8g переходить.
PS Готов предоставить такой дисплей в бессрочное пользование. :-)
Пока не знаю. В самое ближайшее время (т.е. пару-тройку месяцев - точно нет). Если заинтересует - закажу такой, в спонсорской помощи не нуждаюсь. Но что-то в последнее время меня больше заинтересовали цветные дисплеи с параллельным интерфейсом совместно с stm32. Только вот уже накопилось более дюжины дисплеев, а планов по их использованию гораздо меньше.
копатели либы OLED , что посоветуете по горячим следам, как переделать на меньший размер по пикселям ?
либа Ug8lib ug2 есть поддержка i2c
0.42" SSD1306 72*40
0.49" SSD1306 Drive 64*32
но либа выжирает почти всю память , есть компактная как от UTFT и здешняя , но нет поддержки малых разрешений. При пробовании запуска на больших разрешениях, мелкие диспы показываю лабуду.
Мож есть какая легкая либа для малопиксельных, или как эту либу переделать на нужное разрешение?
// есть интерес попробовать сделать уменьшенный вариант Data Glasses Arduino (насадка на технич. очки, проецирует показания перед глазом )
А как эта "лабуда" выглядит?
Скажем, как выглядит экран, если вывести только:
- вертикальный отрезок,
- горизонтальный отрезок,
Доброго времени суток!
спасибо за библиотеку!
не подскажете на какие пины вешать дисплей? Если не сложно, то подробно (Arduino UNO)....я новичок
сам разобрался ......
дисплей-->Arduino
VDD-->3.3V
GNG-->GND
SCK(или SCL) --> SCL
SDA-->SDA
нсли подскажете что изменить чтоб повесить на другие пины буду премного благодарен
PS другие библиотеки с моим дисплеем корректно работать не хотели
На SDA и SCL. У Arduino Uno это A4 и A5.
На SDA и SCL. У Arduino Uno это A4 и A5.
странно у меня есть отдельные порты SDA,SCL или это физически A4,A5?
Это одни и те же пины. Просто на новых ревизиях плат пины A4,A5 продублированы на противоположной стороне с названием SDA,SCL.
А как эта "лабуда" выглядит?
Скажем, как выглядит экран, если вывести только:
- вертикальный отрезок,
- горизонтальный отрезок,
0.49" SSD1306 64*32
Эт с U2G8 , а с вашей либой оказалось норм, черный экран вывода цифр вылечился сдвигом +31,+4
LD.printString_6x8("012345_0000", 31, 4); // первая строчка
Хотел вывести большие цифры int count; , не получилось
1. (думал что либа запоминает шрифт после LD.printString_12x16 )
как понял надо обязательно добывлять (long) для вывода int: LD.printNumber( (long)count , 31, 4); - печатает только мелкий шрифт
2. попробовал через конветрацию , переменная String thisString=" ";
thisString = String(count, DEC); // преобразуем int count в String
LD.printString_12x16( (const)thisString , 31, 4); //в либе подсмотрел что надо const , (String) тож не работает LD.printString_12x16( (string)thisString , 31, 4);
Test_ASOLED2:53: error: invalid cast from type
'String'
to type
'const int'
exit status 1
invalid cast from type
'String'
to type
'const int'
LD.printString_12x16( thisString , 31, 4); - тож не работает
C:\Users\...\Documents\Arduino\Test_ASOLED2\Test_ASOLED2.ino: In function
'void loop()'
:
Test_ASOLED2:54: error: no matching function
for
call to
'ASOLED::printString_12x16(String&, int, int)'
C:\Users\...\Documents\Arduino\Test_ASOLED2\Test_ASOLED2.ino:54:108: note: candidates are:
In file included from C:\Users...\Documents\Arduino\Test_ASOLED2\Test_ASOLED2.ino:3:0:
C:\Users\...\Documents\Arduino\libraries\ASOLED/ASOLED.h:35:8: note:
void
ASOLED::printString_12x16(
const
char
*,
byte
,
byte
)
void
printString_12x16(
const
char
*String,
byte
X=255,
byte
Y=255);
// font 12x16, switch CurrFont to Font_12x16
^
C:\Users\...\Documents\Arduino\libraries\ASOLED/ASOLED.h:35:8: note: no known conversion
for
argument 1 from
'String'
to
'const char*'
In file included from C:\Users\...\Documents\Arduino\Test_ASOLED2\Test_ASOLED2.ino:3:0:
C:\Users\...\Documents\Arduino\libraries\ASOLED/ASOLED.h:39:8: note:
void
ASOLED::printString_12x16(
const
__FlashStringHelper*,
byte
,
byte
)
void
printString_12x16(
const
__FlashStringHelper *ifsh,
byte
X=255,
byte
Y=255);
// font 12x16, switch CurrFont to Font_12x16 - text in PROGMEM
^
C:\Users\...\Documents\Arduino\libraries\ASOLED/ASOLED.h:39:8: note: no known conversion
for
argument 1 from
'String'
to
'const __FlashStringHelper*'
exit status 1
no matching function
for
call to
'ASOLED::printString_12x16(String&, int, int)'
подскажите пожалуйста как надо сделать чтоб int count большим шрифтом напечатался
printString() работает не со String, а с char*. Т.е. в Вашем случае должно быть что-то вроде LD.printString(thisString.c_str(), 31, 4);
Любые целые типы по идее должны преобразовываться в long. Безо всяких дополнительных действий с Вашей стороны.
Шрифт запоминается.
Дальше, не имея экрана, что-то сказать сложно.
Как именно выглядит это "не работает"?
Пытались выводить мелкий шрифт со смещением +5, +6, +7? А крупный с тем же смещением?
Еще можно попытаться поиграть с SetTurnedOrientation(); В этом случае картинка должна быть кверху ногами и со смещением от +0.
а как быть в таком случае?
1
LD.printString_12x16(F(time.gettime(
"H:i:s"
), 0, 2));
macro "F" passed 3 arguments, but takes just 1
ибо, если сделаю вот так, вообще не проходит.
1
LD.printString_12x16(F(time.gettime(
"H:i:s"
)), 0, 2);
br0lviv, а что Вы хотите сделать?
br0lviv, а что Вы хотите сделать?
Я хочу вывести часы, минуты и секунды. Получается более одного значения, поэтому и ошибка? И как работает (F(...)); Возможно я не до конца понимаю его принцип действия. Спасибо
Вот мне и непонятно, с какой целью Вы пытаетесь использовать макрос F().
Ну и заодно приведите прототип функции .gettime() для используемой Вами библиотеки (в ASOLED такой функции нет).
Как работает этот макрос? Или где можно о нем почитать?
Без него, все работает. Но как я понимаю ест больше памяти
Для того, чтобы Вам можно было помочь, надо иметь больше информации. А эту информацию Вы не предоставляете, предпочитая задавать вопросы, но не отвечать на мои.
Чтобы почитать о макросе, наберите в поиске "Arduino PROGMEM".
А вот сможете ли Вы использовать его в своем проекте, я не знаю, т.к. Вы не делитесь информацией, о которой я прошу.
Ну и самое главное - пока у меня нет никаеких оснований думать, что для вашего проекта требуется "больше памяти".
Извините, не с того начал. Вы правы. Предоставить более подробную информацию смогу вечером. спасибо, что отвечаете)
Пробую эту библиотеку на слегка другом дисплее размером 128х32. Столкнулся с тем, что большой шрифт отображается "нормально", а вот 6х8 нет. Я так понял, что обрезается сверху и снизу строка пикселей. И если на большом шрифте этого не заметно, то вот с маленьким не прокатывает. Посоветуете, как это можно решить.
Да либа хорошая и мало занимает . спасибо andriano , все работает, все выводит.
для малых дисплеев просто добавил смещение +.. +.. по горизонтали и вертикали.
или можете исправить в либе , найти где выводится другой шрифт , и поставить там смещение чтоб само добавлялось при выборе этого шрифта.
Не очень понял про смещение. В каком месте его редактировать.
Сделал фотки как выглядит.
aledan, дисплея такого у меня нет, поэтому сказать, что и как исправлять, не могу - не на чем проверить свои догадки.
А догадки, надо сказать, не очень приятные: из сравнения того, что пишет slider, и что пишете Вы, могу предположить, что китайцы на матрице 128х32 делают два разных вида дисплея, управлять которыми тоже нужно по-разному.
Собственно, контроллер предусматривает формат экрана 128х64, а в дисплее количество строк вдвое меньше. Т.е. половина строк не должна использоваться. Вопрос в том - какая именно половина. Похоже, что в дисплее slider'а это вторая половина (т.е. строки с 32 по 63), а в Вашем дисплее - через одну (например, все нечетные). Соответственно, и методы борьбы должны быть разными.
Но это только мои предположения.
Здравствуйте, подскажите, как с помощью вашей библиотеки выводит на экран OLED0.95" динамичесике цифры - если цифра изменяется от 0 до 100 (float), то например если значние изменилось с 85 до 0, значение на экране остается 05, как можно сделать обновление цифры постоянно, не совсем понял как можно работать стипом char? можно пример
Если следующее выводимое значение имеет меньшую длину, чем предыдущее, "лишние" знакоместа нужно стирать. Например, выводя на их месте пробел.
Ну а работать с типом char можно по-разному. Все зависит от того, что Вы хотите в результате получить.
а как вывести значок "градус"?
пытаюсь LD.printString_12х16("\xC2\xB0");
выводит звёздочку.
Upd. Разобрался. Спасибо.
хочу сделать типа такой функции, суть такая какое бы не было значение tape к нему добавляется в конце пустое место, думаю будет "затирать хвост" если длинна текста изменится, но в библиотеки нет функции printChar, поэтому и спрашиваю, как можно работать с функцией char, может как то проще это можно сделать?
Yarik_22, в библиотеке есть функция printChar, только она недоступна снаружи. Это сделано специально. Дело в том, что "char" в языке Си - это одно, а в кодировке UTF-8 - совсем другое. И как только мы пытаемся использовать кириллицу, эта разница сразу проявляется. Поэтому функция printChar в общепринятом смысле (для вывода одного символа) применительно к кодировке UTF-8 вообще невозможна.
Библиотека в целях компактронсти не поддерживает ни "String", ни "string", поэтому при обращении к ней следует использовать Си-строки (char*, заканчивающийся нулем). Если параметры, задающие позицию вывода, опустить, очередной символ будет отображаться вслед за предыдущим. Т.е. в Вашем случае вывод должен вцыглядеть как-то так:
1
void
drawNum (String tape,
int
width,
int
x,
int
y) {
2
LD.printString(tape.c_str, x, y);
3
LD.printString(
" "
);
4
}
Писал прямо в редакторе, не проверял.
PS. Кстати, и с точки зрения расхода памяти такой подход будет гораздо лучше.
при компиляции ошибка
error: invalid use of non-static member function
LD.printString(
" "
); теперь все затирает как надо, артефактов не остается!!! а так как кроме этого числа на одной строке ни чего нет, то эта функция ни чего лишнего не уберет.
Здравствуйте! Подойдёт ли эта библиотека для esp8266?
Пробуйте. Я ее и для Due использовал. А с ESP - не пробовал.
С ESP32 работает, только нужно #ifdef немного поправить.
По памяти, вечером дома проверю.
ASOLED.cpp
01
#if defined(__AVR__)
02
#include <avr/pgmspace.h>
03
#endif
04
05
// ...
06
07
void
ASOLED::init(){
08
Wire.begin();
09
// upgrade to 400KHz! (only use when your other i2c device support this speed)
10
#if (!defined(__SAM3X8E__) && !defined(ESP32))
11
if
(I2C_400KHZ){
12
// save I2C bitrate (default 100Khz)
13
byte
twbrbackup = TWBR;
14
TWBR = 12;
15
}
16
#else
17
Wire.setClock(400000);
18
#endif
a_Small_Rus.c
1
//...
2
#elif defined(__arm__)
3
#define PROGMEM
4
#define fontdatatype const unsigned char
5
#elif defined(ESP32)
6
#define PROGMEM
7
#define fontdatatype const unsigned char
8
#endif
PS to Andriano: мож на GitHub?
Добрый день! Скажите что я делаю не так? Использую эту библиотеку, в скетче пишу, например,
1
LD.printString_12x16(
"ПРИВЕТ"
, 0, 0);
загружаю, на экране вместо букв звездочки.
В IDE нажимаю Исправить кодировку и перезагрузить. При этом весь русский тест в скетче (включая коментарии) меняется на кракозябры, исправляю нужные мне строки и загружаю - на экране русский текст.
При этом примеры идущие с библиотекой работают нормально - и в скетче и на экране русские буквы без танцев с бубном.
karabas_19, видимо, у Вас какие-то проблемы с кодировкой Arduino iDE. По умолчанию должна быть utf-8, и библиотека рассчитана именно на это.
И как это исправить? В настройках IDE не нахожу ничего связанного с кодировками
Когда используете скетчи где есть кириллица, перед загрузкой нужно сохранить скетч (настройки-сохранить), иначе кириллица исчезает и вместо него появляется звездочки или ромбы и тп. Это нужно делать , если после открытия скетча Вы вносили изменения, не важно какие!
Tomat7, спасибо за рекомендации! Запустил библиотеку в ESP8266. В исправлениях вместо 32 написал 8266.
Правда пример не пошел . Оставил только печать текстов, печатает.
Такая ошибка:
01
mice.c:14:1: error: unknown type name
'fontdatatype'
02
03
fontdatatype mice[] PROGMEM={
04
05
^
06
07
mice.c:14:21: error: expected
'='
,
','
,
';'
,
'asm'
or
'__attribute__'
before
'PROGMEM'
08
09
fontdatatype mice[] PROGMEM={
10
11
^
12
13
Используем библиотеку Wire версии 1.0 из папки: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\Wire
14
Используем библиотеку ASOLED в папке: C:\Arduino\arduino-1.8.7\libraries\ASOLED (legacy)
15
exit status 1
16
unknown type name
'fontdatatype'
Может подскажете, что еще подправить.
И как это исправить? В настройках IDE не нахожу ничего связанного с кодировками
Я не могу воспроизвести Вашу ситуацию: у меня при создании нового скетча он сразу получается в utf-8. Если нажать "Исправить кодировку", он перекодирует так, как если бы исходный текст был в 1251. Т.е. портит строку. Если я набираю рядом с испорченной новую - она отображается правильно и в дальнейшем все так и работает.
Т.е. я не могу получить режим, чтобы в IDE и на дисплее у меня отображалось по-разному. Соответственно, не могу понять причину проблемы и, следовательно, способо борьбы с нею.
А что если сразу после запуска среды сначала нажимать new, а только потом начинать набирать текст?
Вы попробуйте изменить скетч и загрузить, как я писал. У меня сразу появляются звездочки, как только сохраню, появляется кириллица. И это не только с Вашей библиотекой. И давно я обнаружил это, прочитав где-то почему так происходит, когда сохраняете код получается в utf-8.
В исправлениях вместо 32 написал 8266. ... Правда пример не пошел.
В примере идущем с библиотекой используется файл mice.c - он лежит в той же папке что и пример.
В начало этого файла нужно добавить те же строки, что и в a_Small_Rus.c
1
...
2
#elif defined(ESP8266)
3
#define PROGMEM
4
#define fontdatatype const unsigned char
5
#endif
У меня после этого пример скомпилился без ошибок.
В строке #elif defined(__arm__)
__arm__ заменил на ESP8266 и пример заработал!
Если вышеуказанные строки просто добавить, ошибка.
Tomat7, еще раз спасибо!
Вы попробуйте изменить скетч и загрузить, как я писал.
У меня сразу появляются звездочки, как только сохраню, появляется кириллица. И это не только с Вашей библиотекой. И давно я обнаружил это, прочитав где-то почему так происходит, когда сохраняете код получается в utf-8.
Когда используете скетчи где есть кириллица, перед загрузкой нужно сохранить скетч
Да, действительно помогло! Я изначально в настройках IDE отключил пункт "Сохранять скетч при проверке или компиляции" дабы в случае чего можно было безболезненно вернуться к исходному состоянию. После включения этого пункта все нормально, кирилица отбражается на дисплее без проблем. При этом неважно редактируется уже набранный ранее код или он пишется с нуля.
Теперь еще один вопрос. Правильно ли я понимаю что при использовании шрифта 12x16 строки нужно выводить через одну иначе происходит их наложение,а для шрифтов 6х8 можно подряд? Например
1
LD.printString_12x16(
"ПРИВЕТ"
,0,0);
2
LD.printString_12x16(
"АРДУИНА"
,0,2);
и
1
LD.printString_6x8(
"ПРИВЕТ"
,0,0);
2
LD.printString_6x8(
"АРДУИНА"
,0,1);
и еще так
1
LD.printString_12x16(
"ПРИВЕТ"
,0,0);
2
LD.printString_6x8(
"АРДУИНА"
,0,2);
Теперь эту библиотеку могут использовать и пользователи программы FLProg! Спасибо, andriano!
https://forum.flprog.ru/viewtopic.php?f=72&t=4910
karabas_19, да, пройдите по ссылке и в выложенных там фото увидите, как располагаются строки.
Я изначально в настройках IDE отключил пункт "Сохранять скетч при проверке или компиляции" дабы в случае чего можно было безболезненно вернуться к исходному состоянию. После включения этого пункта все нормально, кирилица отбражается на дисплее без проблем.
Теперь еще один вопрос. Правильно ли я понимаю что при использовании шрифта 12x16 строки нужно выводить через одну иначе происходит их наложение,а для шрифтов 6х8 можно подряд? Например
А как их выводить - это уже дело Ваше )))))
Спасибо, за прикольную библиотеку, полезная штучка, да еще с русскими буквами. :)
С моими таймерами, иногда, намертво вешает контроллер. Не часто, раз в день примерно, хотя иногда может и сутки проработать а иногда минут 15. Полагаю, где-то прерывания между собой конфликтуют. Если таймер останавливаю перед выводом на экран - работает стабильно. :)
Напрямую я ни таймер, ни прерывания нигде не использую. Так что конфликтовать IMHO может только с ардуиновксм wire.
Попытайтесь проверить свои таймеры, скажем, с Liquid_Crystall_I2C. Или с какой другой библиотекой, интенсивно использу.щей wire.
Напрямую я ни таймер, ни прерывания нигде не использую. Так что конфликтовать IMHO может только с ардуиновксм wire.
Попытайтесь проверить свои таймеры, скажем, с Liquid_Crystall_I2C. Или с какой другой библиотекой, интенсивно использу.щей wire.
Ненене, я про биб-ку ничо плахова не говорю. Так и должно быть в пересекающихся прерываниях.
Вешаецца, именно в момент вывода, видно по артефактам и непрорисованным до конца буквам.
Это не в Ваш огород камень, упаси Госспади, это я так, чтобы иметь ввиду.
Семен, так я немного не об этом. В принципе, wire, вроде, работает с прерываниями, но тогда получается, что Ваши таймеры конфликтуют со стандартной библиотекой Ардуино wire. По-хорошему, с этим бы надо разобраться.
Но для начала я бы порекомендовал закомментировать в моей библиотеке повышение скорости с 100 до 400 кГц (строка "#define I2C_400KHZ 1 // 0 to use default 100Khz, 1 for 400Khz " в файле asoled.h) и посмотреть, как это скажется на устойчивости работы:
- если частота конфликтов увеличится, значит, Ваши таймеры действительно конфликтуют с wire,
- если конфликты исчезнут, значит, конфликт проявляется только на повышенной скорости, и, знапчит, Ваши таймеры не конфликтуют с wire на обычной скорости,
- если частота проявления конфликтов не изменится, будем думать дальше.
Разобралса. В зависаниях виноват плохо контачащий Dallas. :)