LiquidCrystal_I2C и курсор

Maka
Offline
Зарегистрирован: 24.10.2015

Добрый день всем!

В стандартной библиотеке LiquidCrystal_I2C и в ее клонах курсор может быть включен-выключен и блинк-ноблинк. А как бы отвязать его от позиции печати символа и управлять им произвольно, перемещая независимо от setCursor() ? По идее, хочется маркировать этим курсором редактируемые поля в меню, ну и масса возможностей использования... 

Нужно переписывать библиотеку как-то, а может есть готовые решения у мастеров? Пропадает целая строчка в символе, жалко, однако!

Maka
Offline
Зарегистрирован: 24.10.2015

Как сделать так:

Cessi71
Offline
Зарегистрирован: 21.05.2016
 
    А что, так не устраивыет?
     lcd.cursor();
     lcd.setCursor(4,1);
 
    У меня замечательно выводит курсор(подчеркивание) в любое место.
Maka
Offline
Зарегистрирован: 24.10.2015

То есть, если вы напишете :

lcd.setCursor(0, 0);

lcd.print("1123456789qwerwtw"); 
lcd.cursor();
lcd.setCursor(10,0);
 
....то подчеркнется "q" ?
Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

То есть, если вы напишете :

lcd.setCursor(0, 0);

lcd.print("1123456789qwerwtw"); 
lcd.cursor();
lcd.setCursor(10,0);
 
....то подчеркнется "q" ?

1lcd.setCursor( 0, 0);
2lcd.print("1234567890qwerty");
3 
4lcd.setCursor(10, 0);
5lcd.cursor();

....то подчеркнется "q"

Maka
Offline
Зарегистрирован: 24.10.2015

...не подчеркивается

Maka
Offline
Зарегистрирован: 24.10.2015
01#include <Wire.h>
02#include <LiquidCrystal_I2C.h>
03LiquidCrystal_I2C lcd(0x3f, 20, 4);
04 
05void setup (){
06  Serial.begin(9600);
07  Wire.begin();
08  lcd.init();
09  lcd.backlight();
10}
11 
12void loop () {
13  lcd.setCursor( 0, 0);
14lcd.print("1234567890qwerty");
15 
16lcd.setCursor(19, 0);
17lcd.cursor();
18}

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

...не подчеркивается

Клапауций 232
Offline
Зарегистрирован: 05.04.2016
01#include <Wire.h>
02#include <LiquidCrystal_I2C.h>
03LiquidCrystal_I2C lcd(0x3f, 20, 4);
04 
05void setup (){
06  Serial.begin(9600);
07  Wire.begin();
08  lcd.init();
09  lcd.backlight();
10 
11lcd.setCursor( 0, 0);
12lcd.print("1234567890qwerty");
13 
14lcd.setCursor(10, 0);
15lcd.cursor();
16 
17}
18 
19void loop () {}

 

Maka
Offline
Зарегистрирован: 24.10.2015

Библиртека стандатная?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

Библиртека стандатная?

ты попробовал мой вариант кода?

Maka
Offline
Зарегистрирован: 24.10.2015

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

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

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

прекращай - у тебя свой вариант кода, если курсор проблескивает.

очевидно же, что ты долбишь печать в лупе с частотой обработки скетча, а не один раз в сетапе.

с чего бы это проблескивать курсору?

Maka
Offline
Зарегистрирован: 24.10.2015

Дак в том и нужда : печатать курсор в экранах меню как метку изменяемого параметра. 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

Дак в том и нужда : печатать курсор в экранах меню как метку изменяемого параметра. 

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

не делай так.

Maka
Offline
Зарегистрирован: 24.10.2015

Да, нужно писать задержку печати курсора, либо "подмораживать " окна меню вместе с курсором в нужном положении

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

Да, нужно писать задержку печати курсора, либо "подмораживать " окна меню вместе с курсором в нужном положении

нет - нужно печатать ОДИН раз по условию изменения чего-то там.

изменилась переменная - напечатал.

нажал на кнопку - напечатал.

что-то произошло - напечатал.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

не знаю, как это у меня так скопипастилось

lcd.setCursor(19, 0);

конечно же

lcd.setCursor(10, 0);

Maka
Offline
Зарегистрирован: 24.10.2015

Да, уже сам додумался. По коду меньше не будет, мне кажется. Но проверю все равно.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Maka пишет:

Но проверю все равно.

достаточно попробовать с закоментированным и расскоментированным.

01#include <Wire.h>
02#include <LiquidCrystal_I2C.h>
03LiquidCrystal_I2C lcd(0x3f, 20, 4);
04 
05void setup (){
06  Serial.begin(9600);
07  Wire.begin();
08  lcd.init();
09  lcd.backlight();
10 
11lcd.setCursor( 0, 0);
12lcd.print("1234567890qwerty");
13 
14lcd.setCursor(10, 0);
15lcd.cursor();
16 
17}
18 
19void loop () {
20 
21// lcd.setCursor( 0, 0);
22// lcd.print("1234567890qwerty");
23 
24// lcd.setCursor(10, 0);
25// lcd.cursor();
26 
27}

 

Maka
Offline
Зарегистрирован: 24.10.2015

Клапауций 232 пишет:

не знаю, как это у меня так скопипастилось

lcd.setCursor(19, 0);

конечно же

lcd.setCursor(10, 0);

Да это суть неважно. Спасибо за совет, буду посмотреть.

Maka
Offline
Зарегистрирован: 24.10.2015

Что пишу: 14 -15 окошек меню, в которых изменяются 5-6 переменных. Сейчас в скетче активная область мигает, для этого написал функции поочередной печати переменной и пробела . Т.к. переменные занимают разное кол-во ячеек экрана, пришлось писать отдельно для float, bool, и byte свои функции мигания. С курсором по вашей методе будет проще, и процессор меньше занят будет постоянной печатью.