Библиотека для LCD Nokia 1100

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

в общем не знаток я, но почитав мануал по дисплею 1100http://mylcd.sourceforge.net/files/pcf8814.pdf стр 16 вот к чему пришел: 

прочесть что-то из дисплея не реально т.к. не выведена нога SDO. Обычное общение происходит через 4 ноги, для приема нужна 5я, которая SDataOut. Возможно в версиях дисплея с незадействованной ногой это она и есть. У меня она отсутствует.  Режим I2C включить не возможно т.к. он включается физически комбинациями подключений ног SD0 и SD1 контроллера, доступа к которым увы нет.

Вывод: Прочесть инфу со встроенного датчика температуры дисплея Nokia1100 простыми способами невозможно.

afftomat
Offline
Зарегистрирован: 04.02.2019

Ребят выложите кто нибудь вольтметр для 1202 замучился искать.Что не найду не пашет или ошибки лезут.Програмировать не умею так что помогите.Пробники типа v1.5 стают на ура.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Ты сначала просто вольтметр сделай, примеров море, в терминал например будет отправлять напряжение. А вот когда у тебя будет что выводить и прицепишь дисплей

afftomat
Offline
Зарегистрирован: 04.02.2019
#include <lcd1202.h>

LCD1202 lcd(8, 7, 6, 5);  // RST, CS, MOSI, SCK
int voltage= 1;

void setup() {
 lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея
Serial.begin(9600);
}

void loop() {
// read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
 
int t= voltage*100;
Serial.println(t);

float n = t;
  String s = String(n, 2);
  int i = s.indexOf('.');
  if (i >= 0) s.remove(i, 1);
  bool b = n < 0;
  if (b) s.remove(0, 1);
  int n1 = s.substring(0, 1).toInt();
  if (b) n1 *= -1;
  int n2 = s.substring(1, 2).toInt();
  int n3 = s.substring(2, 3).toInt();
  int n4 = s.substring(3).toInt();
  
lcd.print(1, 1, 1,  "arduino.ru рулит");


lcd.simb16x32(27, 19, 1, n1);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя
lcd.fillRect(48, 49, 3, 3, 1);    //Рисуем закрашенный прямоугольник по координатам x, y, высота, ширина, цвет
lcd.simb16x32(53, 19, 1, n2);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя
lcd.simb16x32(79, 19, 1, n3);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя

lcd.Update();
delay(1000);
lcd.Clear_LCD();

}

Ошибка Call of overloaded String(float&,int)is ambiguous. Я канешно не очень в этом но если простой вольтметр то на мониторе пишет.Не знаю как у кого с 8 станицы он работает у меня нет.Помогите раздуплится.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Это кто вас так научил делать? от 23 до 33 строки что за черная магия "огненный шторм" для того чтобы спичку зажечь

тебе нужно деление на 10 "/10" и остаток от деления на 10 "%10"

так например http://arduino.ru/forum/programmirovanie/razdelenie-chisla-na-otdelnye-tsifry#comment-164280

afftomat
Offline
Зарегистрирован: 04.02.2019

Я только начинаю в этом разбиратся я сам это с этого форума скопировал просто чуть убрал.Почему и просил вольтметр божеский.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты надеюсь ссылку что я дал увидел?

alecksis
alecksis аватар
Offline
Зарегистрирован: 13.10.2017

Может, просто сначала залей библиотечку рабочую эту, и посмотри, как она работает (если дисплэй заработает)? Попробуй поизменять в ней что-нибудь, попробуй разобраться. А уже потом начнешь вольтметр.

afftomat
Offline
Зарегистрирован: 04.02.2019

Начелось просто попросил дайте пожалуйста вольтметр.Занимаюсь квадриками там и шью контроллеры полетов регуляторы скорости и осд.но никогда не програмировал вот сейчас сижу рзбираюсь.Просто помогите за спасибо!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#include <lcd1202.h>

LCD1202 lcd(8, 7, 6, 5);  // RST, CS, MOSI, SCK
int voltage= 1;

void setup() {
 lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея
Serial.begin(9600);
}

void loop() {
// read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
 
int t= voltage*100;
Serial.println(t);

lcd.print(1, 1, 1,  "arduino.ru рулит");

lcd.simb16x32(27, 19, 1, t/100);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя
lcd.fillRect(48, 49, 3, 3, 1);    //Рисуем закрашенный прямоугольник по координатам x, y, высота, ширина, цвет
lcd.simb16x32(53, 19, 1, t%100/10);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя
lcd.simb16x32(79, 19, 1, t%10);            //Выводим в координаты x, y, цветом 1, цифру 8, размером 16х32 пикселя

lcd.Update();
delay(1000);
lcd.Clear_LCD();

}

что то вроде должно получится

afftomat
Offline
Зарегистрирован: 04.02.2019

Огромное спасибо работает.Хоть ктото носом ткнул.Щас буду разбиратся.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да не за что. помог только потому что ты попытался сделать

я может не очень понятно написал, так как можно было сначала разбить число t на цифры, а потом их выводить, я сократил запись

afftomat
Offline
Зарегистрирован: 04.02.2019

Повтыкал и теперь понял не так все сложно уже все работает теперь все на 5 вольтметров сделаю мерять 4х баночный акум.Спасибо.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Там не совсем так будет. Уже поздно, завтра если что пиши подскажу

p-a-h-a
Offline
Зарегистрирован: 17.01.2019
//Держи на 5 каналов. Вывод в миливольтах.
#include <lcd1202.h>
LCD1202 lcd(8, 7, 6, 5);  // RST, CS, MOSI, SCK
const int Reference = 5000;
const int ADCmax = 1023;
const boolean zero = 0;
void setup() {
  analogReference(DEFAULT); //DEFAULT - напряжение питания, INTERNAL 1,1В для Atmega 328 или EXTERNAL c напряжением AREF.
  lcd.Inicialize();  //Инициализация дисплея
}

void loop() {
  lcd.Clear_LCD();
  lcd.print(1, 1, 1,  map(analogRead(A0), zero, ADCmax, zero, Reference)); // растягиваем ацп шкалу  0..1023 до 0..5000
  lcd.print(1, 12, 1,  map(analogRead(A1), zero, ADCmax, zero, Reference));
  lcd.print(1, 24, 1,  map(analogRead(A2), zero, ADCmax, zero, Reference));
  lcd.print(1, 36, 1,  map(analogRead(A3), zero, ADCmax, zero, Reference));
  lcd.print(1, 48, 1,  map(analogRead(A4), zero, ADCmax, zero, Reference));
  lcd.Update();
  delay(400);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

afftomat пишет:

Повтыкал и теперь понял не так все сложно уже все работает теперь все на 5 вольтметров сделаю мерять 4х баночный акум.Спасибо.

Если правильно понял 4S батарея, но там немного сложнее будет, делители нужны, просто подключить без делителей не получится, сожгешь аналоговые входы

afftomat
Offline
Зарегистрирован: 04.02.2019

Да все верно делитель сразу был ато там дури.Сейчас пытался второе число добавить но только ероглифы.Есть заводской 7мисигм но он летает постоянно и там показывает напряжение поочередно.А хотелось отдельно 16в общ и 3.78в 3.9в 3.22в 3.7в отдельно каждая банка причем сразу на одном экране.Кстати если сделать потонше можно в повербанк всунуть причем вроди и без подсветки видно акумов хватает.

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Предыдущее мое сообщение для кого?

afftomat
Offline
Зарегистрирован: 04.02.2019

Видел спасибо.Еслиб с точкой вообще былобы круто.Дописал по банкам и все уже пашет.

MDV
Offline
Зарегистрирован: 08.08.2013

очень нужно знать, что это за команду можно подать на поворот вывода информации на дисплей?

поделитесь плиз

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

Понравилась библиотека,часто ей пользуюсь но недавно столкнулся с тем что уж очень она прожорливая в плане RAM

Но выход был найден и пользователь нашего форума sadman41  любезно согласился подправить билиотеку .

Пример использования RAM оригинальной библиотекой

#include "lcd1202.h"
LCD1202 lcd(8, 7, 6, 5);  // RST, CS, MOSI, SCK
void setup() {
lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея
}
void loop() {
lcd.print(1, 1, 1,  "     Привет!    ");
lcd.print(1, 10, 1, "  Пример работы ");
lcd.print(1, 20, 1, "с драйвером v1.5");
lcd.print(1, 30, 1, "     дисплея    ");
lcd.print(1, 40, 1, "   Nokia 1202  ");
lcd.print(1, 50, 1, " с контроллером ");
lcd.print(1, 60, 1, "    STE2007      ");
lcd.Update();
delay(10000);
lcd.Clear_LCD();
lcd.print(1, 1, 1,  "Вопросы на форум");
lcd.print(1, 10, 1, "arduino.ru/forum");
lcd.print(1, 20, 1, " Автор шрифтов  ");
lcd.print(1, 30, 1, " и всех функций ");
lcd.print(1, 40, 1, "     Jeka_tm    ");
lcd.print(1, 50, 1, "Драйвер и пример");
lcd.print(1, 60, 1, "  создал Gres  ");
lcd.Update();
delay(10000);
lcd.Clear_LCD();
}
Скетч использует 2776 байт (9%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1115 байт (54%) динамической памяти, оставляя 933 байт для локальных переменных. Максимум: 2048 
Пример использования RAM правленой библиотекой
#include "lcd1202.h"
LCD1202 lcd(8, 7, 6, 5);  // RST, CS, MOSI, SCK
void setup() {
lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея

}
void loop() {
lcd.print(1, 1, 1, F( "     Привет!    "));
lcd.print(1, 10, 1,F( "  Пример работы "));
lcd.print(1, 20, 1,F( "с драйвером v1.5"));
lcd.print(1, 30, 1,F( "     дисплея    "));
lcd.print(1, 40, 1, F("   Nokia 1202  "));
lcd.print(1, 50, 1, F(" с контроллером "));
lcd.print(1, 60, 1, F("    STE2007      "));
lcd.Update();
delay(10000);
lcd.Clear_LCD();
lcd.print(1, 1, 1, F( "Вопросы на форум"));
lcd.print(1, 10, 1,F( "arduino.ru/forum"));
lcd.print(1, 20, 1, F(" Автор шрифтов  "));
lcd.print(1, 30, 1,F( " и всех функций "));
lcd.print(1, 40, 1,F( "     Jeka_tm    "));
lcd.print(1, 50, 1,F( "Драйвер и пример"));
lcd.print(1, 60, 1,F( "  создал Gres  "));
lcd.Update();
delay(10000);
lcd.Clear_LCD();
}
Скетч использует 2764 байт (8%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 877 байт (42%) динамической памяти, оставляя 1171 байт для локальных переменных. Максимум: 2048 байт.
 
Как видно , результат "на лице" )) 
Использовать так 
lcd.print(0, 0, 1, F( "Любой текст"));

Тут правленые .cpp и .h .  

 
 
 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Не хочу показаться пессимистом, но как урезали потребление оперативной памяти? Почти все занимает буфер.
Кажется B707 делал менее прожорливую по оперативной памяти в 3 раза, но и процессорное время увеличилось в 3 раза (все что выводится на дисплей 3 раза просчитывалось). Тут похоже иной подход. И на первый взгляд просто текст меню хранить во флеше.

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

jeka_tm пишет:
И на первый взгляд просто текст меню хранить во флеше.

Так и сделано . Просто оригинальная либа не могла это сделать правильно используя функцию F(). Подробнее может рассказать автор изменений.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Хорошо. Спасибо. Сохранил себе.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Просто внесу ясность: прожорливость библиотеки не снизилась.

Накладные расходы увеличивались по причине ее неумения читать строки напрямую из Progmem Space. Что приводило к ситуации, в которой неизменные, по своей сути, названия пунктов меню перегружались в RAM и постоянно там болтались. Я просто добавил функцию, которая "понимает", что на вход ей передаётся ссылка на расположенную в Progmem строку и корректно работает с этим типом памяти. За счёт чего и снижается расход RAM скетчем, использующим данную библиотеку. 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Делал один проект на OLED SSD1306, и на этапе окончательной сборки треснул дисплей. Нежный. Через пиксель строки не выводятся

Второго не было, поэтому снова использовал 1202. Но показалось как то неудобно каждый раз писать "цвет" выводимого чего-то, поэтому решил убрать, а "цвет" задавать отдельной функцией. Добавил вывод чисел с плавающей запятой (писал выше как то) и использовал хранение текста во флеше о чем писал mobistrike. И убрал из инициализации вывод ресет дисплея (я его цепляю к 3.3В). Кому надо вернут быстро, просто скопировать из предыдущих либ.

Теперь вывод выглядит так:

#include "lcd1202.h"
LCD1202 lcd(7, 8, 9);  // CS, MOSI, SCK
void setup() {
lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея

}
void loop() {
  
lcd.print(1, 1, 1.115, 2);
lcd.print(1, 10, F( "  Пример работы "));
lcd.print(1, 20, F( "с драйвером v1.5"));
lcd.print(1, 30, F( "     дисплея    "));
lcd.print(1, 40, F("   Nokia 1202  "));
lcd.print(1, 50, F(" с контроллером "));
lcd.print(1, 60, F("    STE2007      "));
lcd.Update();
delay(10000);

lcd.setColor(0);
lcd.Clear_LCD();
lcd.print(1, 1, F( "Вопросы на форум"));
lcd.print(1, 10, F( "arduino.ru/forum"));
lcd.print(1, 20, F(" Автор шрифтов  "));
lcd.print(1, 30, F( " и всех функций "));
lcd.print(1, 40, F( "     Jeka_tm    "));
lcd.print(1, 50, F( "Драйвер и пример"));
lcd.print(1, 60, F( "  создал Gres  "));
lcd.Update();
delay(10000);
lcd.setColor(1);
lcd.Clear_LCD();
}

ссылка на библиотеку

Пример я поленился исправлять...

Кстати у кого будет выводится только текст на английском, например при компиляции в версии 1.8.5, это нормально. Все дело в кодировках, нет нет да и выведется русский (при очередной компиляции). Кодировка по умолчанию UTF, но иногда почему то 1251. Тут насколько знаю ничего не поделать, просто использовать другую версию IDE.

С 1202 тоже неплохо смотрится, но вот наспех сделанная панель на замену

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Может кто помнит как правильно собирать строку из текста и переменных и вывод на дисплей. Что то вроде

lcd.print(1, 1, String("data " + i));

но в либе char

void LCD1202::print(byte x, byte y, char *str){
  unsigned char type = *str;
  if(type>=128) x=x-3;
  while(*str){ 
    drawChar(x, y, *str++);
    unsigned char type = *str;
    (type>=128)? x=x+3 : x=x+6;
  }
}

 помню кому то давал как правильно, но сам забыл, и найти не могу

sss0777@ukr.net
sss0777@ukr.net аватар
Offline
Зарегистрирован: 28.06.2019

Nokia2.h

МОЖНО БИБЛИОТЕКУ

kokuam
kokuam аватар
Offline
Зарегистрирован: 10.01.2017

Обычно я вешаю Rst на RC-цепочку и управляю этим экранчиком 2-мя ногами, на мелких батарейных устройствах - достаточно. Но случилось управлять шлифовальным станком и из-помех пришлось-таки подключить Rst к контроллеру.

Товарищ Larry Bank в своей библиотеке ( https://github.com/bitbank2/bb_hx1230 ) делает в init c Rst такие магические пассы :

   // Start by reseting the LCD controller
   digitalWrite(iResetPin, HIGH);
   delay(50);
   digitalWrite(iResetPin, LOW);
   delay(5);
   digitalWrite(iResetPin, HIGH); // take it out of reset
   delay(10);

а как делаете вы?

kokuam
kokuam аватар
Offline
Зарегистрирован: 10.01.2017

delete

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

А можно схемку с rc цепочкой? Вроде же 4 ноги нужно.

kokuam
kokuam аватар
Offline
Зарегистрирован: 10.01.2017

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Удалось кому подружить библиотеку с esp32? Ругается на lcd1202.cpp:48:7
Не может конвертировать типы данных.
out = portOutputRegister(digitalPinToPort(pin));

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Рад представить функцию отображения графика в реальном времени. Скорее всего велосипед но работает.

nokia1100

Писалось под цветной дисплей, но очень легко портировалась под монохромный.

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

График автоматически масштабируется, запоминает все предыдущие полученные значения, выбирает из них максимальное и минимальное и строится в соответствующем масштабе. 

При вызове функции указываются координаты вывода а также высота и длинна графика в пикселях.

Дисплей подключен и инициализирован, библиотека установлена.

в основном цикле вызываю функцию графика:

void loop() {
for (float i = 0; i<=100; i+=0.2){
Graph(3,5, 90,45, sin(i)*100);//x,y,длинна, высота, переменная целая в диапазоне int
}
}
В отдельной вкладке всавляю саму функцию

void Graph(byte x,byte y, byte h,byte w, int val){//позиция x,y, высота h, длинна w в пикселях, принимаемое значение init i

static int Y_position [96];//тут максимальное количество точек по горизонтали. Условие 96>=w
static int minVAL;
static int maxVAL;
static int lastP;

if (lastP!=val){ //Если значение изменилось то выполняем код до конца страницы lastP!=val заменить единицей 1 если нужно фиксировать одинаковые значения подряд
  lastP=val;
  

//Очистка прежней линии
for (byte i = 1; i < w; i++){
int Ydata = Y_position [i] - minVAL;
int Ydata_next = Y_position [i+1] - minVAL;
lcd.drawLine(x+i,y+map(Ydata, 0, maxVAL-minVAL,h, 0),x+i+1,y+map(Ydata_next, 0, maxVAL-minVAL,h, 0),0);
}




//Сдвигаем масив влево
for (byte i = 1; i < w; i++){
Y_position [i]= Y_position [i+1];
}
Y_position [w]= val; //Записываем новый элемент массива в последнюю ячейку



//вычисляем масштаб граффика
minVAL=32767; maxVAL=-32768;
for (byte i = 1; i < w+1; i++){
minVAL=min(minVAL , Y_position [i]);
maxVAL=max(maxVAL , Y_position [i]);
}
if (maxVAL-minVAL<15)maxVAL=minVAL+15;
if (minVAL>15) minVAL-=15;

//масштабируем и рисуем граффик
for (byte i = 1; i < w; i++){
int Ydata = Y_position [i] - minVAL;
int Ydata_next = Y_position [i+1] - minVAL;
lcd.drawLine(x+i,y+map(Ydata, 0, maxVAL-minVAL,h, 0),x+i+1,y+map(Ydata_next, 0, maxVAL-minVAL,h, 0),1);
}
}
lcd.Update();
}

 

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

jeka_tm пишет:

Может кто помнит как правильно собирать строку из текста и переменных и вывод на дисплей. Что то вроде

lcd.print(1, 1, String("data " + i));

...

 

 
void setup() {
  Serial.begin( 9600 ); // устанавливаем последовательное соединение
char buf[40];    
sprintf(buf, "Time %.2d:%.2d:%.2d Date %.2d %s. %d ",
        1, 32, 45, 3, "jul", 2020);//цифры можно заменить переменными
    Serial.println(buf);
    Serial.println("Hi "+String(2048)+" by");
}
void loop() {
}

В терминале: Time 01:32:45 Date 03 jul. 2020 и Hi 2048 by

Пример выдран отсюда https://github.com/JChristensen/DS3232RTC/blob/master/examples/rtcTimeTemp/rtcTimeTemp.ino

c float не работает. Нужно в два захода флоат выводить целую и дробную часть остатком от деления %10 или воспользоваться преобразованием float http://geekmatic.in.ua/arduino_otobrazhenie_dannyih_float

https://www.php.net/manual/ru/function.sprintf.php тут почитай про sprintf

Постом выше на анимации нижняя строка даты так собрана. А как вы хотели .print("Привет"+String(int)+"пока")

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

jeka, как добавить мелкий шрифт 3х5 в библиотеку? Куда копать, что почитать?

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

Вот от другого дисплея нашел шрифт 4х6. Как его прикрутить?

#include <inttypes.h>
#if defined(__AVR__)
# include <avr/pgmspace.h>
#endif
#include "fonts.h"

#ifdef FONT_4X6
#if defined(__AVR__)
const PROGMEM uint8_t font_PGM[] = 
#else
const uint8_t font_PGM[] = 
#endif
{
  0x00,0x00,0x00,0x00,0x00,0x00, // 0x20
  0x02,0x02,0x02,0x00,0x02,0x00, // 0x21
  0x05,0x05,0x00,0x00,0x00,0x00, // 0x22
  0x05,0x07,0x05,0x07,0x05,0x00, // 0x23
  0x02,0x03,0x06,0x03,0x06,0x02, // 0x24
  0x04,0x01,0x02,0x04,0x01,0x00, // 0x25
  0x02,0x05,0x03,0x05,0x07,0x00, // 0x26
  0x06,0x04,0x00,0x00,0x00,0x00, // 0x27
  0x02,0x04,0x04,0x04,0x02,0x00, // 0x28
  0x04,0x02,0x02,0x02,0x04,0x00, // 0x29
  0x05,0x02,0x07,0x02,0x05,0x00, // 0x2A
  0x00,0x02,0x07,0x02,0x00,0x00, // 0x2B
  0x00,0x00,0x00,0x00,0x06,0x04, // 0x2C
  0x00,0x00,0x07,0x00,0x00,0x00, // 0x2D
  0x00,0x00,0x00,0x00,0x02,0x00, // 0x2E
  0x01,0x01,0x02,0x04,0x04,0x00, // 0x2F
  0x03,0x05,0x05,0x05,0x06,0x00, // 0x30
  0x02,0x06,0x02,0x02,0x07,0x00, // 0x31
  0x06,0x01,0x02,0x04,0x07,0x00, // 0x32
  0x06,0x01,0x02,0x01,0x06,0x00, // 0x33
  0x01,0x05,0x07,0x01,0x01,0x00, // 0x34
  0x07,0x04,0x06,0x01,0x06,0x00, // 0x35
  0x02,0x04,0x06,0x05,0x02,0x00, // 0x36
  0x07,0x01,0x03,0x02,0x02,0x00, // 0x37
  0x02,0x05,0x02,0x05,0x02,0x00, // 0x38
  0x02,0x05,0x03,0x01,0x02,0x00, // 0x39
  0x00,0x00,0x02,0x00,0x02,0x00, // 0x3A
  0x00,0x00,0x02,0x00,0x06,0x04, // 0x3B
  0x01,0x02,0x04,0x02,0x01,0x00, // 0x3C
  0x00,0x00,0x07,0x00,0x07,0x00, // 0x3D
  0x04,0x02,0x01,0x02,0x04,0x00, // 0x3E
  0x06,0x01,0x02,0x00,0x02,0x00, // 0x3F
  0x07,0x05,0x05,0x04,0x07,0x00, // 0x40
  0x02,0x05,0x07,0x05,0x05,0x00, // 0x41
  0x06,0x05,0x06,0x05,0x06,0x00, // 0x42
  0x03,0x04,0x04,0x04,0x03,0x00, // 0x43
  0x06,0x05,0x05,0x05,0x06,0x00, // 0x44
  0x07,0x04,0x06,0x04,0x07,0x00, // 0x45
  0x07,0x04,0x06,0x04,0x04,0x00, // 0x46
  0x03,0x04,0x05,0x05,0x03,0x00, // 0x47
  0x05,0x05,0x07,0x05,0x05,0x00, // 0x48
  0x07,0x02,0x02,0x02,0x07,0x00, // 0x49
  0x01,0x01,0x01,0x05,0x02,0x00, // 0x4A
  0x05,0x05,0x06,0x05,0x05,0x00, // 0x4B
  0x04,0x04,0x04,0x04,0x07,0x00, // 0x4C
  0x05,0x07,0x07,0x05,0x05,0x00, // 0x4D
  0x05,0x07,0x05,0x05,0x05,0x00, // 0x4E
  0x02,0x05,0x05,0x05,0x02,0x00, // 0x4F
  0x06,0x05,0x06,0x04,0x04,0x00, // 0x50
  0x02,0x05,0x05,0x07,0x03,0x00, // 0x51
  0x06,0x05,0x06,0x05,0x05,0x00, // 0x52
  0x03,0x04,0x07,0x01,0x06,0x00, // 0x53
  0x07,0x02,0x02,0x02,0x02,0x00, // 0x54
  0x05,0x05,0x05,0x05,0x07,0x00, // 0x55
  0x05,0x05,0x05,0x05,0x02,0x00, // 0x56
  0x05,0x05,0x07,0x07,0x05,0x00, // 0x57
  0x05,0x05,0x02,0x05,0x05,0x00, // 0x58
  0x05,0x05,0x02,0x02,0x02,0x00, // 0x59
  0x07,0x01,0x02,0x04,0x07,0x00, // 0x5A
  0x06,0x04,0x04,0x04,0x06,0x00, // 0x5B
  0x04,0x04,0x02,0x01,0x01,0x00, // 0x5C
  0x06,0x02,0x02,0x02,0x06,0x00, // 0x5D
  0x02,0x05,0x00,0x00,0x00,0x00, // 0x5E
  0x00,0x00,0x00,0x00,0x00,0x0F, // 0x5F
  0x06,0x02,0x00,0x00,0x00,0x00, // 0x60
  0x00,0x00,0x03,0x05,0x07,0x00, // 0x61
  0x04,0x04,0x06,0x05,0x06,0x00, // 0x62
  0x00,0x00,0x03,0x04,0x03,0x00, // 0x63
  0x01,0x01,0x03,0x05,0x03,0x00, // 0x64
  0x00,0x00,0x07,0x06,0x03,0x00, // 0x65
  0x01,0x02,0x07,0x02,0x02,0x00, // 0x66
  0x00,0x00,0x07,0x05,0x01,0x07, // 0x67
  0x04,0x04,0x06,0x05,0x05,0x00, // 0x68
  0x02,0x00,0x02,0x02,0x02,0x00, // 0x69
  0x02,0x00,0x02,0x02,0x02,0x06, // 0x6A
  0x04,0x04,0x05,0x06,0x05,0x00, // 0x6B
  0x02,0x02,0x02,0x02,0x02,0x00, // 0x6C
  0x00,0x00,0x07,0x07,0x05,0x00, // 0x6D
  0x00,0x00,0x06,0x05,0x05,0x00, // 0x6E
  0x00,0x00,0x02,0x05,0x02,0x00, // 0x6F
  0x00,0x00,0x06,0x05,0x06,0x04, // 0x70
  0x00,0x00,0x03,0x05,0x03,0x01, // 0x71
  0x00,0x00,0x06,0x04,0x04,0x00, // 0x72
  0x00,0x00,0x03,0x02,0x06,0x00, // 0x73
  0x00,0x02,0x07,0x02,0x03,0x00, // 0x74
  0x00,0x00,0x05,0x05,0x07,0x00, // 0x75
  0x00,0x00,0x05,0x05,0x02,0x00, // 0x76
  0x00,0x00,0x05,0x07,0x07,0x00, // 0x77
  0x00,0x00,0x05,0x02,0x05,0x00, // 0x78
  0x00,0x00,0x05,0x05,0x02,0x04, // 0x79
  0x00,0x00,0x06,0x02,0x03,0x00, // 0x7A
  0x03,0x02,0x06,0x02,0x03,0x00, // 0x7B
  0x02,0x02,0x02,0x02,0x02,0x00, // 0x7C
  0x06,0x02,0x03,0x02,0x06,0x00, // 0x7D
  0x05,0x0A,0x00,0x00,0x00,0x00, // 0x7E
  0x00,0x02,0x05,0x07,0x00,0x00, // 0x7F
#ifndef FONT_END7F
  0x03,0x04,0x04,0x07,0x02,0x04, // 0x80
  0x05,0x00,0x05,0x05,0x03,0x00, // 0x81
  0x01,0x02,0x07,0x06,0x03,0x00, // 0x82
  0x02,0x05,0x03,0x05,0x07,0x00, // 0x83
  0x05,0x00,0x03,0x05,0x07,0x00, // 0x84
  0x04,0x02,0x03,0x05,0x07,0x00, // 0x85
  0x02,0x00,0x03,0x05,0x07,0x00, // 0x86
  0x00,0x07,0x04,0x07,0x02,0x06, // 0x87
  0x02,0x05,0x07,0x06,0x03,0x00, // 0x88
  0x05,0x00,0x07,0x06,0x03,0x00, // 0x89
  0x04,0x02,0x07,0x06,0x03,0x00, // 0x8A
  0x05,0x00,0x02,0x02,0x02,0x00, // 0x8B
  0x02,0x05,0x00,0x02,0x02,0x00, // 0x8C
  0x04,0x02,0x00,0x02,0x02,0x00, // 0x8D
  0x05,0x02,0x05,0x07,0x05,0x00, // 0x8E
  0x02,0x02,0x05,0x07,0x05,0x00, // 0x8F
  0x01,0x02,0x07,0x06,0x07,0x00, // 0x90
  0x00,0x00,0x03,0x07,0x06,0x00, // 0x91
  0x03,0x06,0x07,0x06,0x07,0x00, // 0x92
  0x02,0x05,0x02,0x05,0x02,0x00, // 0x93
  0x05,0x00,0x02,0x05,0x02,0x00, // 0x94
  0x04,0x02,0x02,0x05,0x02,0x00, // 0x95
  0x02,0x05,0x00,0x05,0x07,0x00, // 0x96
  0x04,0x02,0x05,0x05,0x07,0x00, // 0x97
  0x05,0x00,0x05,0x05,0x02,0x04, // 0x98
  0x05,0x02,0x05,0x05,0x02,0x00, // 0x99
  0x05,0x00,0x05,0x05,0x07,0x00, // 0x9A
  0x02,0x07,0x04,0x07,0x02,0x00, // 0x9B
  0x01,0x02,0x07,0x02,0x07,0x00, // 0x9C
  0x05,0x07,0x02,0x07,0x02,0x00, // 0x9D
  0x00,0x06,0x06,0x05,0x05,0x00, // 0x9E
  0x03,0x02,0x03,0x02,0x06,0x00, // 0x9F
  0x01,0x02,0x03,0x05,0x07,0x00, // 0xA0
  0x01,0x02,0x00,0x02,0x02,0x00, // 0xA1
  0x01,0x02,0x07,0x05,0x07,0x00, // 0xA2
  0x01,0x02,0x00,0x05,0x07,0x00, // 0xA3
  0x07,0x00,0x07,0x05,0x05,0x00, // 0xA4
  0x07,0x00,0x05,0x07,0x05,0x00, // 0xA5
  0x03,0x05,0x07,0x00,0x07,0x00, // 0xA6
  0x02,0x05,0x02,0x00,0x07,0x00, // 0xA7
  0x02,0x00,0x02,0x04,0x03,0x00, // 0xA8
  0x00,0x07,0x04,0x04,0x00,0x00, // 0xA9
  0x00,0x0E,0x02,0x02,0x00,0x00, // 0xAA
  0x04,0x05,0x02,0x05,0x03,0x00, // 0xAB
  0x04,0x05,0x02,0x07,0x01,0x00, // 0xAC
  0x02,0x00,0x02,0x02,0x02,0x00, // 0xAD
  0x00,0x05,0x0A,0x05,0x00,0x00, // 0xAE
  0x00,0x0A,0x05,0x0A,0x00,0x00, // 0xAF
  0x04,0x01,0x04,0x01,0x04,0x01, // 0xB0
  0x05,0x0A,0x05,0x0A,0x05,0x0A, // 0xB1
  0x0B,0x0E,0x0B,0x0E,0x0B,0x0E, // 0xB2
  0x02,0x02,0x02,0x02,0x02,0x02, // 0xB3
  0x02,0x02,0x0E,0x02,0x02,0x02, // 0xB4
  0x02,0x0E,0x02,0x0E,0x02,0x02, // 0xB5
  0x05,0x05,0x0D,0x05,0x05,0x05, // 0xB6
  0x00,0x00,0x0F,0x05,0x05,0x05, // 0xB7
  0x00,0x0E,0x02,0x0E,0x02,0x02, // 0xB8
  0x05,0x0D,0x01,0x0D,0x05,0x05, // 0xB9
  0x05,0x05,0x05,0x05,0x05,0x05, // 0xBA
  0x00,0x0F,0x01,0x0D,0x05,0x05, // 0xBB
  0x05,0x0D,0x01,0x0F,0x00,0x00, // 0xBC
  0x05,0x05,0x0F,0x00,0x00,0x00, // 0xBD
  0x02,0x0E,0x02,0x0E,0x00,0x00, // 0xBE
  0x00,0x00,0x0E,0x02,0x02,0x02, // 0xBF
  0x02,0x02,0x03,0x00,0x00,0x00, // 0xC0
  0x02,0x02,0x0F,0x00,0x00,0x00, // 0xC1
  0x00,0x00,0x0F,0x02,0x02,0x02, // 0xC2
  0x02,0x02,0x03,0x02,0x02,0x02, // 0xC3
  0x00,0x00,0x0F,0x00,0x00,0x00, // 0xC4
  0x02,0x02,0x0F,0x02,0x02,0x02, // 0xC5
  0x02,0x03,0x02,0x03,0x02,0x02, // 0xC6
  0x05,0x05,0x05,0x05,0x05,0x05, // 0xC7
  0x05,0x05,0x04,0x07,0x00,0x00, // 0xC8
  0x00,0x07,0x04,0x05,0x05,0x05, // 0xC9
  0x05,0x0D,0x00,0x0F,0x00,0x00, // 0xCA
  0x00,0x0F,0x00,0x0D,0x05,0x05, // 0xCB
  0x05,0x05,0x04,0x05,0x05,0x05, // 0xCC
  0x00,0x0F,0x00,0x0F,0x00,0x00, // 0xCD
  0x05,0x0D,0x00,0x0D,0x05,0x05, // 0xCE
  0x02,0x0F,0x00,0x0F,0x00,0x00, // 0xCF
  0x05,0x05,0x0F,0x00,0x00,0x00, // 0xD0
  0x00,0x0F,0x00,0x0F,0x02,0x02, // 0xD1
  0x00,0x00,0x0F,0x05,0x05,0x05, // 0xD2
  0x05,0x05,0x07,0x00,0x00,0x00, // 0xD3
  0x02,0x03,0x02,0x03,0x00,0x00, // 0xD4
  0x00,0x03,0x02,0x03,0x02,0x02, // 0xD5
  0x00,0x00,0x07,0x05,0x05,0x05, // 0xD6
  0x05,0x05,0x0D,0x05,0x05,0x05, // 0xD7
  0x02,0x0F,0x00,0x0F,0x02,0x02, // 0xD8
  0x02,0x02,0x0E,0x00,0x00,0x00, // 0xD9
  0x00,0x00,0x03,0x02,0x02,0x02, // 0xDA
  0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, // 0xDB
  0x00,0x00,0x00,0x0F,0x0F,0x0F, // 0xDC
  0x0C,0x0C,0x0C,0x0C,0x0C,0x0C, // 0xDD
  0x03,0x03,0x03,0x03,0x03,0x03, // 0xDE
  0x0F,0x0F,0x0F,0x00,0x00,0x00, // 0xDF
  0x00,0x00,0x07,0x06,0x07,0x00, // 0xE0
  0x02,0x05,0x06,0x05,0x06,0x04, // 0xE1
  0x07,0x05,0x04,0x04,0x04,0x00, // 0xE2
  0x07,0x05,0x05,0x05,0x05,0x00, // 0xE3
  0x07,0x04,0x02,0x04,0x07,0x00, // 0xE4
  0x00,0x00,0x03,0x05,0x02,0x00, // 0xE5
  0x00,0x00,0x05,0x05,0x07,0x04, // 0xE6
  0x00,0x01,0x06,0x02,0x02,0x00, // 0xE7
  0x07,0x02,0x05,0x02,0x07,0x00, // 0xE8
  0x02,0x05,0x07,0x05,0x02,0x00, // 0xE9
  0x00,0x02,0x05,0x05,0x05,0x00, // 0xEA
  0x03,0x04,0x02,0x05,0x02,0x00, // 0xEB
  0x00,0x00,0x07,0x05,0x07,0x00, // 0xEC
  0x02,0x07,0x05,0x07,0x02,0x00, // 0xED
  0x03,0x04,0x07,0x04,0x03,0x00, // 0xEE
  0x02,0x05,0x05,0x05,0x05,0x00, // 0xEF
  0x07,0x00,0x07,0x00,0x07,0x00, // 0xF0
  0x02,0x07,0x02,0x00,0x07,0x00, // 0xF1
  0x06,0x01,0x06,0x00,0x07,0x00, // 0xF2
  0x03,0x04,0x03,0x00,0x07,0x00, // 0xF3
  0x00,0x01,0x02,0x02,0x02,0x02, // 0xF4
  0x02,0x02,0x02,0x02,0x04,0x00, // 0xF5
  0x02,0x00,0x07,0x00,0x02,0x00, // 0xF6
  0x00,0x05,0x0A,0x05,0x0A,0x00, // 0xF7
  0x02,0x05,0x02,0x00,0x00,0x00, // 0xF8
  0x00,0x02,0x07,0x02,0x00,0x00, // 0xF9
  0x00,0x00,0x02,0x00,0x00,0x00, // 0xFA
  0x03,0x02,0x02,0x06,0x02,0x00, // 0xFB
  0x07,0x05,0x05,0x00,0x00,0x00, // 0xFC
  0x06,0x02,0x04,0x06,0x00,0x00, // 0xFD
  0x00,0x00,0x06,0x06,0x00,0x00, // 0xFE
  0x00,0x00,0x00,0x00,0x00,0x00  // 0xFF
#endif
};
#endif

Как понимаю необходимо создать что-то такое:

#include "font5x3.h"

void LCD1202::print5x3(byte x, byte y, boolean color, char *str){
  unsigned char type = *str;
  if(type>=128) x=x-3;// ЧТО ОЗНАЧАЕТ 3
  while(*str){ 
    drawChar(x, y, color, *str++);
    unsigned char type = *str;
    (type>=128)? x=x+3 : x=x+6;// ЧТО ТАКОЕ 3 и 6?
  }
}

void LCD1202::drawChar5x3(byte x, byte y, boolean color, unsigned char c) {

  if((x >= LCD_X) ||(y >= LCD_Y) || ((x + 3) < 0) || ((y + 5) < 0))// Это если символ слишком большой или вылазит за пределы дисплея?
    return;

  if(c<128)            c = c-32;//  НЕПОНЯТНЫ ЭТИ ИФЫ
  if(c>=144 && c<=175) c = c-48;
  if(c>=128 && c<=143) c = c+16;
  if(c>=176 && c<=191) c = c-48;
  if(c>191)  return;

  for (byte i=0; i<4; i++ ) { // 4 это число байт в массиве на символ?
    byte line;
    (i == 3)? line = 0x0 : line = pgm(font5x3+(c*5)+i);
    for (byte j = 0; j<6; j++) {
      (line & 0x1)? drawPixel(x+i, y+j, color) : drawPixel(x+i, y+j, !color);
      line >>= 1;
    }
  }
}

Не пойму что тут менять. 
В итоге в IDE просто будет вызов функции
lcd.print5x3("String");

Нарыл из другой библиотеки возможность увеличивать стандартный шрифт в целое число раз. Не уверен что полезная функция но прикрутить можно.

void GraphicsLib::setTextSize(uint_least8_t size)
{
  text_size = size;

  return;
}


void GraphicsLib::setTextWrap(uint_least8_t wrap)
{
  text_wrap = (wrap!=0)?1:0;

  return;
}


#if ARDUINO >= 100
size_t GraphicsLib::write(uint8_t c)
#else
void GraphicsLib::write(uint8_t c)
#endif
{
  if(c == '\n')
  {
    text_x  = start_x;
    text_y += (text_size&0x7F)*FONT_HEIGHT;
  }
  else if((c != '\r') && (c != '\t'))//skip
  {
    if((c != ' ') || (text_x != 0))
    {
      text_x = drawChar(text_x, text_y, c, text_fg, text_bg, text_size);
      if(text_wrap && (text_x > (lcd_width-((text_size&0x7F)*FONT_WIDTH))))
      {
        text_x = start_x;
        text_y += (text_size&0x7F)*FONT_HEIGHT;
        if(text_y > (lcd_height-((text_size&0x7F)*FONT_HEIGHT)))
        {
          text_y = 0;
        }
      }
    }
  }
#if ARDUINO >= 100
  return 1;
#else
  return;
#endif
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
// ответы пишу по памяти
#include "font5x3.h"

void LCD1202::print5x3(byte x, byte y, boolean color, char *str){
  unsigned char type = *str;
  if(type>=128) x=x-3;// ЧТО ОЗНАЧАЕТ 3 // это сдвиг нужен для русских шрифтов, связано с ASCII кодов русских символов
  while(*str){ 
    drawChar(x, y, color, *str++);
    unsigned char type = *str;
    (type>=128)? x=x+3 : x=x+6;// ЧТО ТАКОЕ 3 и 6? // тоже связано с русскими символами. шрифт 5х8, поэтому сдвиг на 6, чтобы сделать пробел между буквами.
  }
}

void LCD1202::drawChar5x3(byte x, byte y, boolean color, unsigned char c) {

  if((x >= LCD_X) ||(y >= LCD_Y) || ((x + 3) < 0) || ((y + 5) < 0))// Это если символ слишком большой или вылазит за пределы дисплея? // да
    return;

  if(c<128)            c = c-32;//  НЕПОНЯТНЫ ЭТИ ИФЫ // эти цифры нужны для подгонки, таблица ascii содержит больше символов, чем в библиотеке. фактически проспуски, а в библиотеке они идут по порядку
  if(c>=144 && c<=175) c = c-48;
  if(c>=128 && c<=143) c = c+16;
  if(c>=176 && c<=191) c = c-48;
  if(c>191)  return;

  for (byte i=0; i<4; i++ ) { // 4 это число байт в массиве на символ? // да
    byte line;
    (i == 3)? line = 0x0 : line = pgm(font5x3+(c*5)+i);
    for (byte j = 0; j<6; j++) {
      (line & 0x1)? drawPixel(x+i, y+j, color) : drawPixel(x+i, y+j, !color);
      line >>= 1;
    }
  }
}

Не пойму что тут менять. 
В итоге в IDE просто будет вызов функции
lcd.print5x3("String"); // так в явном виде не может быть. или нужно сначала координаты задать где выводить отдельной функцией, или в функцию вывода добавить указание координат

 

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Спасибо. Пока что добавил отображение мелких чисел

в файл шрифта добавил
static const char mass3x5[10][3] PROGMEM ={
{0x1f, 0x11, 0x1f,},  // 0
{0x12, 0x1f, 0x10,},  // 1
{0x1d, 0x15, 0x17,},  // 2
{0x15, 0x15, 0x1f,},  // 3
{0x07, 0x04, 0x1f,},  // 4
{0x17, 0x15, 0x1d,},  // 5
{0x1f, 0x15, 0x1d,},  // 6
{0x19, 0x05, 0x03,},  // 7
{0x1f, 0x15, 0x1f,},  // 8
{0x17, 0x15, 0x1f}  // 9
};

в библиотеке.cpp в конце
//=========================Вывод символа 3х5 пикселя в координаты XY
void LCD1202::simb3x5(byte x, byte y, boolean color, byte c){
  for (byte k=0;k<1;k++){
    for (byte i=0;i<3;i++){
      byte line = pgm(&(mass3x5[c][i+k*3]));
      for (byte j = 0; j<8; j++) {
        (line & 0x01)? drawPixel(x+i, y+j+k*8, color) : drawPixel(x+i, y+j+k*8, !color);
        line >>= 1;
      }
    }
  }
}

в библиотеке.h дописал клас
void simb3x5(byte x, byte y, boolean color, byte c);

Вызывается lcd.simb3x5(4, 0, 1, 1);

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Ну вот разобрался)

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

20200214-174516

https://yadi.sk/d/VqFvAadmjdNPvQ

Библиотека, собрана на основе последней библиотеки jeka_tm

Добавлен мелкий шрифт 5х3 (цыфры, заглавные английские буквы, символы) вывод строк, переменных со знаком, float

lcd.print3x5(0,0,"1.0123456789:;<=>?@!#$%&");
lcd.print3x5(0,6,"2.'()*+,-./_[^]`ABCDEFGH");//указаны ВСЕ возможные символы, которые есть в шрифте
lcd.print3x5(0,12,"3.IJKLMNOPQRSTUVWXYZ");//  
lcd.print3x5(0,48,-9);//Печатаем отрицательное число
lcd.print3x5(0,54,10);// печатаем положительное число
lcd.print3x5(0,60,11.516,2);// Печатаем float с округлением до 2го знака

 

Заменен вывод simb10x16 добавлены символы :.- Теперь выводятся так:

lcd.print10x16(1, 25, -12.56,1);              //Выводим в координаты x, y цифру -12.6, размером 10х16 пикселей
lcd.print10x16(1, 45, "-0.5:");          //Выводим строку. Указаны ВСЕ возможные символы кроме цифр

Отредактирован пример

В скетче добавлена возможность отдельно задействовать ногу RST не ломая библиотеку

# define RSTpin A3// RST

 

Глюк мелкий обнаружил в 162 строке библиотеки нужно исправить       "(for (byte j = 0; j<8; j++) " 8 на 5 это количество пикселей по вертикали иначе шрифт подтирает под собой три пикселя. Перезаливать лень.

kokuam
kokuam аватар
Offline
Зарегистрирован: 10.01.2017

p-a-h-a пишет:
Перезаливать лень.

Что вы мучаетесь, заливайте на гитхаб одной командой : git push origin master  
Там и изменения комментировать удобнее и не надо голову ломать что означает словосочетание "отдельно задействовать ногу RST" - сразу в коде видно.