Помогите с lcd.cursor
- Войдите на сайт для отправки комментариев
Вс, 06/05/2018 - 11:28
объясните, кто знает, почему при установке курсора таким способом lcd.setCursor (8, d); cd.cursor(); он еле заметно бегает по всему 16х2 экрану, а не подсвечивается в в указанном lcd.setCursor (8, d); месте?
while (a < 9) {
if (present)temperatura();
lcd.setCursor(14, 0);
lcd.print(celsius);
lcd.setCursor(14, 1);
lcd.print(celsius1);
lcd.setCursor(5, 0);
lcd.print(s);
lcd.setCursor(5, 1);
lcd.print(s + 1);
lcd.setCursor(7, 0);
lcd.print(temp1[g]);
lcd.setCursor(7, 1);
lcd.print(temp1[g + 1]);
lcd.setCursor (8, d);
lcd.cursor();
}
А while для чего?
Как написано, так и работает.
я его ставил и до while все равно бегает по всему экрану
while для того, чтоб не выйти из void setuptemp(), по-другому я не знал как сделать
void setuptemp() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Окно. Ул."); lcd.setCursor(0, 1); lcd.print("Окно. Теп"); d = 0; i1 = i; g = 0; s = 1; a = 1; for (byte g = 0; g < 4; g++) { if (temp1[g] < 26)temp1[g] = 25; } while (a < 9) { if (present)temperatura(); lcd.setCursor(14, 0); lcd.print(celsius); lcd.setCursor(14, 1); lcd.print(celsius1); lcd.setCursor(5, 0); lcd.print(s); lcd.setCursor(5, 1); lcd.print(s + 1); lcd.setCursor(7, 0); lcd.print(temp1[g]); lcd.setCursor(7, 1); lcd.print(temp1[g + 1]); lcd.setCursor (8, d); lcd.cursor(); int button = detectButton(); switch (button) { case BTN_UP: delay (200); if (downup != 0) { if (d == 0 && s != 1) { s--; } if (d != 0)d--; if (downup < 3 && g != 0) g--; downup--; } break; case BTN_DOWN: delay (200); if (downup != 3) { if (d == 1 && s != 3) { s++; } if (d != 1)d++; if (downup > 0 && g != 2) g++; downup++; } break; case BTN_LEFT: b1 = g; if (g == 0 && downup == 0)g = 0; if ((g == 0 && downup == 1) || (g == 1 && downup == 1))g = 1; if ((g == 1 && downup == 2) || (g == 2 && downup == 2))g = 2; if (g == 2 && downup == 3)g = 3; if (temp1[g] > 25)temp1[g]--; g = b1; delay (200); break; case BTN_RIGHT: b1 = g; if (g == 0 && downup == 0)g = 0; if ((g == 0 && downup == 1) || (g == 1 && downup == 1))g = 1; if ((g == 1 && downup == 2) || (g == 2 && downup == 2))g = 2; if (g == 2 && downup == 3)g = 3; if (temp1[g] < 50)temp1[g]++; g = b1; delay (200); break; case BTN_SELECT: if (i1 == 0) str1 = 0; else { a = 10; str1 = -1; } downup = 1; lcd.noCursor(); delay(200); temp(); break; } } }я его ставил и до while все равно бегает по всему экрану
В упор не вижу.
lineyka, поставьте отладочные печати по коду и посмотрите, как он выполняется.
В упор не вижу.
делал вот так
void setuptemp() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Окно. Ул."); lcd.setCursor(0, 1); lcd.print("Окно. Теп"); d = 0; i1 = i; g = 0; s = 1; a = 1; for (byte g = 0; g < 4; g++) { if (temp1[g] < 26)temp1[g] = 25; } lcd.setCursor (8, d);// перенес сюда lcd.cursor(); // перенес сюда while (a < 9) { if (present)temperatura(); lcd.setCursor(14, 0); lcd.print(celsius); lcd.setCursor(14, 1); lcd.print(celsius1); lcd.setCursor(5, 0); lcd.print(s); lcd.setCursor(5, 1); lcd.print(s + 1); lcd.setCursor(7, 0); lcd.print(temp1[g]); lcd.setCursor(7, 1); lcd.print(temp1[g + 1]); //lcd.setCursor (8, d); //lcd.cursor(); int button = detectButton(); switch (button) { case BTN_UP: delay (200); if (downup != 0) { if (d == 0 && s != 1) { s--; } if (d != 0)d--; if (downup < 3 && g != 0) g--; downup--; } break; case BTN_DOWN: delay (200); if (downup != 3) { if (d == 1 && s != 3) { s++; } if (d != 1)d++; if (downup > 0 && g != 2) g++; downup++; } break; case BTN_LEFT: b1 = g; if (g == 0 && downup == 0)g = 0; if ((g == 0 && downup == 1) || (g == 1 && downup == 1))g = 1; if ((g == 1 && downup == 2) || (g == 2 && downup == 2))g = 2; if (g == 2 && downup == 3)g = 3; if (temp1[g] > 25)temp1[g]--; g = b1; delay (200); break; case BTN_RIGHT: b1 = g; if (g == 0 && downup == 0)g = 0; if ((g == 0 && downup == 1) || (g == 1 && downup == 1))g = 1; if ((g == 1 && downup == 2) || (g == 2 && downup == 2))g = 2; if (g == 2 && downup == 3)g = 3; if (temp1[g] < 50)temp1[g]++; g = b1; delay (200); break; case BTN_SELECT: if (i1 == 0) str1 = 0; else { a = 10; str1 = -1; } downup = 1; lcd.noCursor(); delay(200); temp(); break; } } }И в каких строках Вы "ставили до while"?
Ну и, что я Вам советовал, - отладочные печати Вы поставили?
стояло в строках 31, 32, я поставил в 15,16 строки.
я реально не понимаю как работает set.cursor
у меня в таком коде он гоняет по всему слову чуть заметный
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { Serial.begin(9600); // set up the LCD's number of columns and rows: lcd.begin(16, 2); } void loop() { lcd.setCursor(5, 0); lcd.print("second"); lcd.setCursor(6, 0); lcd.cursor(); }и даже в таком
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { Serial.begin(9600); // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.setCursor(6, 0); lcd.cursor(); } void loop() { lcd.setCursor(5, 0); lcd.print("second"); }если есть возможность покажите пожалуйста правильный код для курсора.
если честно, я не понял куда надо поставить отладочные печати, что я должен увидеть
прошу помощи, я не понимаю принцип работы set.cursor
может я неправильно его применяю, мне надо чтобы он подчеркивал (вообще чтоб моргал) под определенным символом в слове или под определенной цифрой (например: second или 56)
lineyka, это не он сам гоняет, это Вы его гоняете почем зря.
Не нужно его теребить на каждом проходе цикла, обращения к нему должны быть тогда и только тогда (!), когда изменяется информация, которую нужно отобразить.
А все остальное время он должен стоять и ждать.
andriano, спасибо, что отвечаете!
но в каком месте я его гоняю? как я понимаю в setup команды выполняются один раз после включения контроллера, но и там он "гоняет"
использовать его хочу для указателя выставления значени, например, времени 00:00:00 далее 00:00:00 при этом он должен еще моргать
если можно покажите пожалуйста пример на коде в 6 посте
но в каком месте я его гоняю?
А Вы поставьте печать в Serial рядом с каждым обращением к lcd, и сами увидите.
поставил в 10 строке и слово отобразилось в порте только один раз, а вот на экране курсор под словом second так и не поймать. Выглядет примерно вот так second _ естественно линия не сплошная и она еле заметна, т.к. курсор гоняет там с бешенной скоростью
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { Serial.begin(9600); // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.setCursor(6, 0); lcd.cursor(); Serial.println("привет"); } void loop() { lcd.setCursor(5, 0); lcd.print("second"); }если сделать вот так
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { Serial.begin(9600); // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.setCursor(5, 0); lcd.print("second"); Serial.println("привет"); } void loop() { lcd.setCursor(6, 0); lcd.cursor(); delay (300); lcd.setCursor(6, 0); lcd.noCursor(); delay (300); }то все моргает под буквой е, это правильный код или есть другой способ?
lineyka, у Вас в коде я насчитал 7 строчек, начинающихся с lcd и только одну Serial.println.
И еще, правильно ли я понимаю, что таким образом Вы пытаетесь организовать мигание курсора? А что, библиотекой не поддерживается аппаратное мигание курсора? Что-нибудь типа lcd.blink?
про те принты, которые Вы говорите, я знаю, что они выполняются циклом. Я думал, что все принты и курсор работают не зависимо друг от друга, а как я понял, то нет и принты "стирали" курсор поэтому он и бегал по всему слову. Я правильно понял?
lcd.blink это же мигающий квадрат, а мне надо подчеркивание или я опять ошибаюсь?
Честно говоря, курсором ни разу пользоваться не приходилось. Но что-то мне помнится, что его форму можно переключить на подчеркивание. В дэйташит нужно смотреть.
Если бы была такая возможность, это было бы прекрасно. Подскажите где можно почитать про курсор?