hugoboss317, Я конечно, понимаю, что я уже заманал в край)) Но блин, все таки хочу увидить пример, как вы очищаете дисплей, а то я делаю это таким способом ->
В текущей версии функция print выводит на дисплей целочисленные значения int, long, byte и строки.
C float нужно колдовать, пока не заморачивался этим. Старая версия доступна в архиве, как и все предыдущие.
Теперь пример вывода выглядит так:
void print(byte x, byte y, boolean color, char *str); //Вывод строки
void print(byte x, byte y, boolean color, long num); //Вывод целочисленных цифровых значений int, long, byte
void print_1607(byte x, byte y, boolean color, char *str); //Вывод строки в заданное знакоместо в заданную строку, как в 1602, только тут 1607
//********** Выводим по координатам числовое значение *****************************
int t= 125;
long p= -345;
byte k= 255;
lcd.print(3, 5, 1, "Выводим циферки:" ); //Выводим по координатам x, y, черным чветом, строку "Выводим циферки:"
lcd.print(9, 15, 1, t); //Выводим числовое значение типа integer
lcd.print(9, 25, 1, p); //Выводим числовое значение типа long
lcd.print(9, 35, 1, k); //Выводим числовое значение типа byte
lcd.Update(); //Обновляем дисплей(выводим из буфера)
delay(1000); //Перекур
lcd.Clear_LCD(); //Очищаем дисплей
//***********************************************************************************
Версия 1.5
Убрана функция DrawString, теперь текстовые строки и целочисленные форматы(byte, int, long) выводятся одной функцией print.
Функция SetCursor_DrawString_1607 переименована в print_1607.
Все остальное без изменений.
Естественно применяя эту библиотеку для созданных со старыми версиями библиотеки скетчами, в последние придется внести необходимые замены, то есть, переименовать в старых скетчах функцию DrawString в print и SetCursor_DrawString_1607 в print_1607.
Работа с типом float в проекте. Библиотека с дисплеем работает очень быстро, но потребляет слишком много памяти из за встроенных шрифтов, которые при необходимости(ненадобности) можно частично или полностью исключить, а так же исключить не используемые функции.
Вот подпаивать тонкий проводок к каждой дорожке на шлейфе экрана вот это гемор, и как я вижу, справился, значит и с float справиться.
Умножаем значение float на 10, объявляем int, инициализируем её умноженным значением, выводим делённое на 10 значение int(не делим, только выводим, выводим точку, выводим остаток от деления на 10 значение int.
Вот подпаивать тонкий проводок к каждой дорожке на шлейфе экрана вот это гемор, и как я вижу, справился, значит и с float справиться.
Умножаем значение float на 10, объявляем int, инициализируем её умноженным значением, выводим делённое на 10 значение int(не делим, только выводим, выводим точку, выводим остаток от деления на 10 значение int.
Не соглашусь ))
мне проще 50 таких проводков припаять чем "ковырять" код программы(микроскоп +опыт ремонта сотовых).
Не моглы бы вы показать это на каком нибудь примере в коде ?
Делаю так:/***********************************************************************************
*value - число для преобразования, comma - позиция точки на индикаторе
*преобразует 16-ти разрядное число, записывает его в буфер индикатора
***********************************************************************************/
void IND_Output(unsigned int value, unsigned char comma){//Время выполнения 111мкс
unsigned char tmp; //
for(unsigned char i = 0; i < 3; i++){ //всего разрядов - 3 (0...2)
tmp = value % 10; //выделить остаток от деления
buf[i] = number[tmp]; //записать в буфер
value = value/10;} //целочисленное деление на 10
if (comma < 3) {buf[comma] |= (1<<(SEG_DP));} //засветка запятой
} //void IND_Output(unsigned int value, unsigned char comma)
Но из-за большого расстояния между целой и дробной частью на самом мелком шрифте выглядит не очень.
А про вывод строки - этот пример понятен, конечно.
К сожалению, я плохо представляю даже как правильно вопрос задать и моё программирование пока сводится к сведению кусков чужого кода, выдернутых из разных программ.
А хочу я вывести переменную-строку (если такое бывает :) ), которая формируется в другой функции.
Не могу найти тот пример, в котором мне эта строка привиделась, там она выводилась в порт, а при попытке вывести её на дисплей, что б я ни делал, у меня либо ошибки, либо нет желаемого результата, что и не удивительно, учитывая мой уровень понимания.
Бесполезно, я нуб. Я паяю всю жизнь, мне проще наклепать пачку таких дисплеев, чем пять строчек кода написать.
Так что мне достаточно этого:
hugoboss317 пишет:
Короче надо в бибу лезть, в шрифт лезть, ну и ещё там кудато надо лезть.
Если бы не нужда, я бы и не лез в это вообще. Ситуация заставляет "сообразить" пид-регулятор с отслеживанием нескольких источников входных данных, реакцией на них и выводом текущего состояния на дисплей. В принципе, всё поместится, пусть и не так нарядно, как хотелось.
Друзья, помогите втащить на экран 1202 время из Ds1307.
На 1602 получается, а на этот ну никак - либо не компилируется, либо не показывает после заливки.
Вот такой вариант работает на 1602. Слепил его на основе примера из библиотеки "RTClib". Вариант с русскими символами на моём 1602 даёт кракозяблы. Английский шрифт - ок.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
char monthsOfTheYear[12][12] = {"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan"};
//char daysOfTheWeek[7][12] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"};
//char monthsOfTheYear[12][12] = {"Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря", "Января"};
void setup () {
lcd.begin(16, 2);
}
void loop () {
DateTime now = rtc.now();
lcd.setCursor(0,0);
if (now.hour()<10) {
lcd.print(' '); };
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute()<10) {
lcd.print('0'); };
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second()<10) {
lcd.print('0'); };
lcd.print(now.second(), DEC);
lcd.setCursor(0,1);
if (now.day()<10) {
lcd.print(' '); };
lcd.print(now.day(), DEC);
lcd.print(' ');
lcd.print(monthsOfTheYear[now.month(), DEC]);
lcd.print(", ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(" ");
}
ну ты переборщил с массивами))) зачем двумерные делаешь если они все одномерные. слова часов минут тоже засунь в массив. все массивы храни во флеше и считывай оттуда
Да это я для примера накидал скетч, так было проще.
Только он не работает, и это главное. Мне первая библиотека RTClib больше подходит, поскольку там по-отдельности даются меры времени, а в этой библиотеке - только строкой. А у меня в целях создать суточный график для электрокотла с учётом ночного/дневного тарифа.
А не могли бы Вы пожалуйста внести в эту библиотеку преобразование int->str, ато я новичок в этом деле, пока для меня сложно понять то что Вы написали. Зарание спасибо.
Эта функция из другой либы. Она, увы мне не подходит из-за отстсутствия некоторых функций.
Я спрашивал конкретно в библиотеке от Gres'агде настраивается контрастность? Все перерыл, ничего похожего, отвечающего за задание контарстности не нашел. Мб кто знает?
то есть букву можешь нарисовать в любом месте? например сместить на 3 пикселя вниз
или все таки привязан к строкам
К строкам привязан. Точно. По другому без буфера быть не может.
ну по строкам я умею, думал мало ли способ нашел не по строкам выводить без буфера
hugoboss317, Я конечно, понимаю, что я уже заманал в край)) Но блин, все таки хочу увидить пример, как вы очищаете дисплей, а то я делаю это таким способом ->
Просто вызываю эту функцию, чтобы все отчистить, иначе никак не получается.
Но я заметил, что когда так "очищаю" , на дисплее видно, что он как бы включен, пиксели немного контрастные.
Ну в принципе конечно можно и так, но по сути вы три раза выводите пустой массив, каждый раз ещё и очищая его.
А вобще экран очищается при инициализации вот таким способом:
X_RES = 96. LCD_D это "1"
Лучше сделать такую функцию. Гораздо быстрей очищать будет.
jeka_tm прошу помощи в решении вопроса с дисплеем 1202 http://arduino.ru/forum/programmirovanie/displei-1202-draiver-ste2007-russkii-shrift
Gres если есть возможность проверь пожалуйста, скопипастил кусок, будет ли работать
надо заменить в либе
на
если норм надо будет добавить для остальных видов данных, аналогично
http://arduino.ru/forum/programmirovanie/biblioteka-dlya-lcd-nokia-1100?...
Gres если есть возможность проверь пожалуйста, скопипастил кусок, будет ли работать
Хорошо, дома все лежит, не забуду, возьму на работу и попробую.
хорошо
По предложениям и замечаниям jeka_tm, поправил библиотеку еще раз и выложил следующий релиз:
библиотека дисплея Nokia 1202 версия 1.5.
В текущей версии функция print выводит на дисплей целочисленные значения int, long, byte и строки.
C float нужно колдовать, пока не заморачивался этим. Старая версия доступна в архиве, как и все предыдущие.
Теперь пример вывода выглядит так:
Версия 1.5
Убрана функция DrawString, теперь текстовые строки и целочисленные форматы(byte, int, long) выводятся одной функцией print.
Функция SetCursor_DrawString_1607 переименована в print_1607.
Все остальное без изменений.
Естественно применяя эту библиотеку для созданных со старыми версиями библиотеки скетчами, в последние придется внести необходимые замены, то есть, переименовать в старых скетчах функцию DrawString в print и SetCursor_DrawString_1607 в print_1607.
Работа с типом float в проекте. Библиотека с дисплеем работает очень быстро, но потребляет слишком много памяти из за встроенных шрифтов, которые при необходимости(ненадобности) можно частично или полностью исключить, а так же исключить не используемые функции.
Добавил видео демо, кому интересно.
по быстрому слепил на основе либы Nokia 1202 либу для Nokia 5110
все тоже самое, просто больше пинов для подключения, и разрешение меньше
https://yadi.sk/d/CXjuENmaEEwun
Здравствуйте !
Не могу правильно вывести на экран значение переменной voltage или любой другой .
На экране только первая цифра. К примеру напряжение 1.63 выводится только 1.
В монитор порта все выводится правильно. Что я делаю не так ?
потому что либа не умеет выводить числа с плавающей запятой. отправь 163. должно выводится
решить проблему можно разбив число на до запятой и после, и выводить по отдельности. гемор, но что поделаешь
))
Это разве гемор?
Вот подпаивать тонкий проводок к каждой дорожке на шлейфе экрана вот это гемор, и как я вижу, справился, значит и с float справиться.
Умножаем значение float на 10, объявляем int, инициализируем её умноженным значением, выводим делённое на 10 значение int(не делим, только выводим, выводим точку, выводим остаток от деления на 10 значение int.
Это разве гемор?
Вот подпаивать тонкий проводок к каждой дорожке на шлейфе экрана вот это гемор, и как я вижу, справился, значит и с float справиться.
Умножаем значение float на 10, объявляем int, инициализируем её умноженным значением, выводим делённое на 10 значение int(не делим, только выводим, выводим точку, выводим остаток от деления на 10 значение int.
Не соглашусь ))
мне проще 50 таких проводков припаять чем "ковырять" код программы(микроскоп +опыт ремонта сотовых).
Не моглы бы вы показать это на каком нибудь примере в коде ?
для начала может стоит определится а нужен ли собственно float? потому что если только для рассчета напряжения и вывода на дисплей он не нужен
Получилось иначе.
Конвертер BMP to arrays брал тут http://en.radzio.dxp.pl/bitmap_converter/
Всем спасибо за помощь.
можно проще
+ доработал и оформил в виде функциии. теперь сам определяет число знаков до запятой, а после запятой нужно указывать
пользоваться так:
пользоваться так:
С целью экономии места на экране хочу уменьшить знакоместо для точки.
Если это реально, помогите изменить строчку из font.h
0x00, 0x60, 0x60, 0x00, 0x00 , // 0x2e .
И ещё. Приведите, пожалуйста, пример использования функции
void print(byte x, byte y, boolean color, char *str); //Вывод строки
У меня вылазит ошибка
expected primary-expression before 'char'
Спасибо.
реально. но места реально не хватает?
lcd.print(1, 1, 1,
"arduino.ru рулит"
);
реально. но места реально не хватает?
lcd.print(1, 1, 1,
"arduino.ru рулит"
);
Пока еще хватает ).
Но из-за большого расстояния между целой и дробной частью на самом мелком шрифте выглядит не очень.
А про вывод строки - этот пример понятен, конечно.
К сожалению, я плохо представляю даже как правильно вопрос задать и моё программирование пока сводится к сведению кусков чужого кода, выдернутых из разных программ.
А хочу я вывести переменную-строку (если такое бывает :) ), которая формируется в другой функции.
Не могу найти тот пример, в котором мне эта строка привиделась, там она выводилась в порт, а при попытке вывести её на дисплей, что б я ни делал, у меня либо ошибки, либо нет желаемого результата, что и не удивительно, учитывая мой уровень понимания.
конечно можно. но пока для общего понимания лучше делай как есть. когда в голове хорошо все на данный момент представлять подскажу куда копать дальше
С целью экономии места на экране хочу уменьшить знакоместо для точки.
Ха... А я в своей библиотеке предусмотрел такой вывод. Некоторые (. , : !)символы выводятся не полной шириной а несколько пикселов.
Только это изначально в шрифте есть особый байт идентиффикатор.
Да и сами "короткие" символы в шрифте сдвинуты влево, выводятся сразу, но не вся ширина.
Короче надо в бибу лезть, в шрифт лезть, ну и ещё там кудато надо лезть.
дай ему ссылку на свою либу. пусть попробует
Бесполезно, я нуб. Я паяю всю жизнь, мне проще наклепать пачку таких дисплеев, чем пять строчек кода написать.
Так что мне достаточно этого:
Короче надо в бибу лезть, в шрифт лезть, ну и ещё там кудато надо лезть.
Если бы не нужда, я бы и не лез в это вообще. Ситуация заставляет "сообразить" пид-регулятор с отслеживанием нескольких источников входных данных, реакцией на них и выводом текущего состояния на дисплей. В принципе, всё поместится, пусть и не так нарядно, как хотелось.
Де то выкладывал тут, могу ещё разок повториться. Оптимизирована для вывода на МК с RAM 1к с поддерхкой графики.
Обратить внимание на способ вывода на экран...
https://yadi.sk/d/HzxsXwb9f9QqN
Друзья, помогите втащить на экран 1202 время из Ds1307.
На 1602 получается, а на этот ну никак - либо не компилируется, либо не показывает после заливки.
Вот такой вариант работает на 1602. Слепил его на основе примера из библиотеки "RTClib". Вариант с русскими символами на моём 1602 даёт кракозяблы. Английский шрифт - ок.
Вывожу то же на 1202, только в столбик:
На выходе получаю:
10 часов
10 минут
10 секунд
10 год
10 месяц Sunday (не декабрь, а воскресенье, Карл!!! 33я строчка кода, как???)
10 день
Friday
С русскими названиями тоже есть проблемы, если строчку раскомментировать, то вместо "Friday" будет написано "ПятницСуббот", недоумение.
Вчера он показывал четверг, поэтому делаю вывод, что RTC-модуль отдаёт данные, только я забрать не умею.
ЧЯДНТ?
UPD:
С этой библиотекой всё заработало с пол-пинка.
ну ты переборщил с массивами))) зачем двумерные делаешь если они все одномерные. слова часов минут тоже засунь в массив. все массивы храни во флеше и считывай оттуда
Да это я для примера накидал скетч, так было проще.
Только он не работает, и это главное. Мне первая библиотека RTClib больше подходит, поскольку там по-отдельности даются меры времени, а в этой библиотеке - только строкой. А у меня в целях создать суточный график для электрокотла с учётом ночного/дневного тарифа.
Подскажите что не так? При выводе val на дисплей, почемуто вместо цифер "кракозябры". Слово STATUS1: выдает нормально.Что делаю не так?
http://github.com/igorok107/PCF8814
библиотека
скорее всего нет преобразование int->str в функции Print. Я бы воспользовался sprintf для форматирования.
скорее всего нет преобразование int->str в функции Print. Я бы воспользовался sprintf для форматирования.
спасибо помогло
А не могли бы Вы пожалуйста внести в эту библиотеку преобразование int->str, ато я новичок в этом деле, пока для меня сложно понять то что Вы написали. Зарание спасибо.
Не подскажете библеотеку Меню. Которая легко заведется с этим дисплеем?
Привет!
Ребят, а подскажите пожалуйста, где в этой либе параметр отвечающий за контрастность экранчика?
Всю либу перерыл, так и не нашел. Кружечки, прямоугольнички, цифреки - пожалуйста, а контрастности нет :(
Либа вот эта, автор "Gres". В ней была ссылка на эту тему.
Спасибо :)
она там уже максимальная. к сожалению этот дисплей не очень контрастный
она там уже максимальная. к сожалению этот дисплей не очень контрастный
Так вот, мне надо ее уменьшить. Где ее можно изменить?
Встречал еще либы к этому экрану, там контрастность можно менять.
Вот, например:
Ну так используй эту функцию. Согласно твоей библиотеки пошли команду со значением от 0 до 31.
Эта функция из другой либы. Она, увы мне не подходит из-за отстсутствия некоторых функций.
Я спрашивал конкретно в библиотеке от Gres'а где настраивается контрастность? Все перерыл, ничего похожего, отвечающего за задание контарстности не нашел. Мб кто знает?
но если не заработает в либе нужно объявить функцию SendByte в public в файле lcd1202.h и тогда код будет
В итоге засунул функцию в эту либу.
Все заработало как надо =) Спасибо!)
можете подсказать, сколько мкА потребляет этот дисплэй?
можете подсказать, сколько мкА потребляет этот дисплэй?
Без подсветки - 200мкА при питании 3.3в.
Подсветка от 3мА, зависит от желаемой ярокости.
Спасибо, всеравно многовато, на батарейках 3 месяца выдержит.
Так отключай дисплей когда не нужен
Спасибо за библиотечку автору!
Друзья, помогите пожалуйста с дисплеем 1203.
Дисплей аппаратно, по соответствующим командам, позволяет отзеркалить изображение по обоим осям, НО:
Как мне развернуть нормальное изображение на 90, 180 или 270 градусов, вообще нужно сделать ориентацию с "альбомной" на "книжную".
Как я понимаю, такое возможно только при полной буферизации изображения, как повернуть массив, строки и столбцы?
В u8glib, на популярных дисплеях это делается командой u8g.setRot90();
Помогите, поделитесь опытом.
Библиотека итак делает полную буферизацию.
А насчет поворотав инициализации подай команду на поворот и наверно нужно будет указать новое разрешение дисплея, так как буфер будет неправильный