Ввод двух-, трех-, четырехзначных числе с матричной клавиатуры на 1604

oner
Offline
Зарегистрирован: 04.11.2017

Всем привет!

У меня уже получилось вывести на дисплей 1604 какой-либо текст, а также выводить на дисплей в указанную ячейку какое-либо число по нажатию его на матричной клавиатуре. Есть желание двигаться дальше и сейчас я ломаю голову над тем, как вывести на дисплей, например, число 12 или 2346, набранное на матричной клавиатуре.

Правильно ли я рассуждаю?:

Для вывода одного числа используется следующий код:

lcd.setCursor(0, 1);
​lcd.print(key);

При следующем нажатии клавиши на клавиатуре, очевидно, положение курсора должно смещаться в 

lcd.setCursor(1, 1);

При нажатии третьей цифры

lcd.setCursor(2, 1);

и т.д. Как это можно сделать?

 

bwn
Offline
Зарегистрирован: 25.08.2014

Так вывести цифирки или число?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Добавьте переменную, в которой будете хранить позицию курсора, например:

cursorPosition = 0;

При каждом нажатии кнопки, после вывода символа на экран, увеличивайте число на 1:

cursorPosition++;

Не забывайте следить, чтобы позиция курсора не вышла за пределы экрана:

if (cursorPosition >= 15) {cursorPosition = 0}

Выводите на экран так:

lcd.setCursor(cursorPosition, 1);
​lcd.print(key);

 

bwn
Offline
Зарегистрирован: 25.08.2014

Жек, так это цифирки получаются, ну или числа, одноразрядные. Чет подсказывает, что ТС другого хочет. Могу конечно ошибаться.))))

oner
Offline
Зарегистрирован: 04.11.2017

bwn пишет:

Жек, так это цифирки получаются, ну или числа, одноразрядные. Чет подсказывает, что ТС другого хочет.

Пожелания два:

1. Запрограммировать так, чтобы, например, при нажатии клавиш '1','2','3','4' на дисплей выводилось 1234.

2. И чтобы эти 1234 программа воспринимала как число, равное 1234.

mixail844
Offline
Зарегистрирован: 30.04.2012

Jeka_M пишет:

Добавьте переменную, в которой будете хранить позицию курсора, например:

cursorPosition = 0;

При каждом нажатии кнопки, после вывода символа на экран, увеличивайте число на 1:

cursorPosition++;

Не забывайте следить, чтобы позиция курсора не вышла за пределы экрана:

if (cursorPosition >= 15) {cursorPosition = 0}

Выводите на экран так:

lcd.setCursor(cursorPosition, 1);
​lcd.print(key);

 

или настроить автоматическое инкрементирование "каретки" вывода данных.
если не настроено "из коробки" в библиотеке для экрана ТС , то надо будет немного почитать документацию экрана
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

oner пишет:

1. Запрограммировать так, чтобы, например, при нажатии клавиш '1','2','3','4' на дисплей выводилось 1234.

2. И чтобы эти 1234 программа воспринимала как число, равное 1234.

на втором пункте колдануть придётся.  

я бы использовал амулеты atoi() или atol()

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ну если не хочется заморачиваться с оптимизацией отрисовки, то всё довольно просто:

int number = 0; // наше число

int key = getKey(); // получаем код нажатой клавиши

if(key) // если что-то там нажато
{
	number *= 10;
	number += key;
	lcd.setCursor(0,0);
	lcd.print(number);
}

Также можно стирать последнюю набранную цифирь по нажатию любой клавиши, для этого достаточно number разделить на 10. Короче - чистая арифметика.

oner
Offline
Зарегистрирован: 04.11.2017

В итоге у меня  при выбора задачи (1 из 4 вариантов) выбранная задача выполняется, но только если она простая. Т.е. Если при нажатии '2' запускается Task_2, то, да, дисплей отображает то, что сказал отображать в этой задаче при 

void Task_2() {
lcd.clear();
lcd.setCursor(8, 1);
lcd.print(222);
}

Но, если я хочу отображать ввод числа, то такая задача отображает только то, что сказано отобразить до ввода числа. Т.е. 

void Task_1() {
  char key = keypad.getKey();
  char  cursorPosition = 1; // Переменная, которая хранит положение курсора

lcd.clear();
lcd.print("Vvedi chislo:");
if (key){
lcd.setCursor(cursorPosition, 2);
lcd.print(key);
cursorPosition++;
} 
}

Отображает на дисплее "Vvedi chislo", а вводимые после этого цифры не отображаются.