Библиотека для 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

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