Ввод числа с клавиатуры

Матричная клавиатура ввод числа значения матричной

Пользовательские блоки для вывода информации на дисплеи и индикаторы, управления тачскрином, различными клавиатурами, добавления русских шрифтов для вывода на дисплеи типа HD44780
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#1

Сообщение Dryundel » 22.01.2022{, 16:26}

KeyNumber
Ввод числа с матричной клавиатуры.jpg
Ввод числа с матричной клавиатуры.jpg (46.15 КБ) 2297 просмотров
.

Актуальная версия: Пересмотрена Ктопка #
Для Int - короткое нажатие Backspace, длинное - Reset
Для Float - короткое нажатие Точка, длинное - Reset
Отдельного входа Reset теперь нет.
Вид нового блокаПоказать
1.jpg
1.jpg (9.57 КБ) 1827 просмотров
.
История версий: - Исправлен баг использования нескольких блоков в проекте 27.01.2022

Ввод числа с матричной клавиатуры.flp (удалено)
.
Блок KeyNumber это блок ввода числа с клавиатуры.
Создавался для работы с матричной клавиатурой.
Привязки блока к конкретной клавиатуре нет. Можно вообще использовать отдельные кнопки.
В примере используется штатный блок клавиатуры, который настраивается.


Входы:
1, 2, 3 ,,, 0 - ввод цифр.
" ± " - Смена знака числа
" • " - Точка (Доступен только для Float)
" < " - Backspace (Доступен только для Long)
Reset - сброс значения на выходах.

Выходы:
Press - На этом выходе формируется короткий импульс при вводе любой цифры.
Num - Хранит последнюю введенную цифру.
Long - Вводимое число в формате long integer
Float - Вводимое число в формате float

Внимание! (Во избежание глупых не очень умных вопросов)
Формат float в Arduino имеет точность 5-6 знаков в совокупности.
Т.е. доступно к примеру 44.4444 или 44444.4
а попытка работать с числом вида 44444444.44444444 ВСЕГДА приведет к ошибке точности.

Подобный алгоритм реализован (вшит) в штатном блоке меню, однако в отличии от него, данный блок не использует стринговые переменные, массивы и структуры. Вся логика основана на вычислениях.

В проекте - примере есть маленькая оплошность. Для того что бы увидеть на дисплее короткий импульс со выхода Press, необходимо добавить блок таймера на отключение на 200-500 мс. (Лень перезаливать)

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Ввод числа с матричной клавиатуры

#2

Сообщение Ingwar » 22.01.2022{, 16:41}

Вот где Вы были с этим блоком полгода назад...? :smile9:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с матричной клавиатуры

#3

Сообщение Dryundel » 22.01.2022{, 16:48}

Ingwar писал(а):
22.01.2022{, 16:41}
Вот где Вы были с этим блоком полгода назад...?
Дык здесь и был. :) Тока сделал полчаса назад и то, потому, что один товарищ запутался с проектом и грех было не помочь.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Ввод числа с клавиатуры

#4

Сообщение Di123 » 22.01.2022{, 17:29}

при выборе флоат у меня пропадает вход удалить символ
можно его зафиксировать

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Ввод числа с клавиатуры

#5

Сообщение Ingwar » 22.01.2022{, 17:31}

Dryundel писал(а):
22.01.2022{, 16:26}
" < " - Backspace (Доступен только для Long)
Di123 писал(а):
22.01.2022{, 17:29}
ри выборе флоат у меня пропадает вход удалить символ
Это жесть просто... КОГДА Вы научитесь сначала читать?
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Ввод числа с клавиатуры

#6

Сообщение Di123 » 22.01.2022{, 17:34}

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

Отправлено спустя 1 минуту 28 секунд:
возможно не привык в меню небыло сброса да и не всегда удобно

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#7

Сообщение Dryundel » 22.01.2022{, 17:48}

Di123 писал(а):
22.01.2022{, 17:36}
ну блин важный параметр
Слишком сложно реализуется для float. Не стал загружать блок.
Блок очень легкий. Занимает мало места.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Ввод числа с клавиатуры

#8

Сообщение com » 22.01.2022{, 17:55}

Я тоже что то делал, но как и куда дел незнаю :smile171: . Клавиатуры разные бывают, фоту бы, для которой вы делали

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#9

Сообщение Dryundel » 22.01.2022{, 17:58}

com писал(а):
22.01.2022{, 17:55}
Я тоже что то делал, но как и куда дел незнаю . Клавиатуры разные бывают, фоту бы, для которой вы делали
Это без разницы. Блок самой клавиатуры это отдельный, штатный блок в данном случае. Можете вообще просто кнопки подключить и свои цифири написать на них. Привязки к клавиатуре нет.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#10

Сообщение Dryundel » 27.01.2022{, 23:12}

Блок обновлен.
- Исправлен баг использования нескольких блоков в проекте 27.01.2022

И хотя применение нескольких клавиатур в проекте, маловероятно.
Но все таки. :)

Аватара пользователя
vacz
Лейтенант
Сообщения: 485
Зарегистрирован: 17.10.2016{, 05:56}
Репутация: 52
Имя: Владимир

Ввод числа с клавиатуры

#11

Сообщение vacz » 28.01.2022{, 17:10}

Может кому пригодится. Лет 5-6 назад, Слимпер сделал блок для работы с клавиатурой ПК.
Блок служит для считывания кодов нажатых клавишь с клавиатуры ПК.
клавиатура ПК.PNG
клавиатура ПК.PNG (2.51 КБ) 1518 просмотров
Клавиатура_(Code_-_Basic).ubi
(74.61 КБ) 64 скачивания
Подключение к разьему PS/2.
GND подключаем к GND Arduino UNO
Vcc подключим к 5V Arduino UNO
DATA подключим 2-pin Arduino UNO (номер пина менятеся через парметры)
CLK подключим к 3-pin Arduino UNO (В место номер апина задеется номер прерывания, подобнее чуть ниже)


Параметры:
interrupt- номер прерывания
В большинстве плат Ардуино существует два внешних прерывания: номер 0 (цифровой вывод 2) и 1 (цифровой вывод 3). Номера выводов для внешних прерываний, доступные в тех или иных платах Ардуино, приведены в таблице ниже:

Плата int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1 7

DataPin - номер пинна данные

Выходы
KeyCode - код нажатой клавиши, значение выводится только на один програмный цикл, а затем сбрасывается в ноль.
KeyCodeRelease - код отжатой (какую отпустили) клавиши, значение выводится только на один програмный цикл, а затем сбрасывается в ноль.
Будь проще к людям. Хочешь быть мудрей - не делай больно мудростью своей. "Омар Хайям"

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ввод числа с клавиатуры

#12

Сообщение Rovki » 15.07.2022{, 11:54}

Респект автору блока. У меня клава 12 кнопок- 0....9, *,#.
Пожелания-
1.Сделать задание минуса при нажатии * (11) перед вводом чисел . Если нажимаем * после ввода любого числа(0-9), то это воспринимается как десятичная точка. Сейчас знак можно поменять только после ввода числа , при нуле (после сброса) поменять знак невозможно. То есть хотелось бы первоначальное нажатие * (перед вводам чисел и когда содержимое равно нулю) меняло бы знак с + на - , без счетного режима. Как в жизни- пишем сначала минус, а потом вводим цифры. Повторное нажатие * после введенного числа игнорируется (десятичная точка одна)
2.Добавить выход INT- для целых чисел. Нажатие вначале на * (как выше) приводит к смене знака с + на -. Если число введено (не равно нулю) ,то нажатие * игнорируется(нет десятичной точки).При сбросе на входе, значение (как раньше) устанавливается в ноль ,а знак +.
Буду признателен за новый блок. :smile427:
Р.С Если 2 сложно, то хотя бы 1 пункт

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#13

Сообщение Dryundel » 15.07.2022{, 12:25}

Rovki писал(а):
15.07.2022{, 11:54}
То есть хотелось бы первоначальное нажатие * (перед вводам чисел и когда содержимое равно нулю) меняло бы знак с + на -
Перед вводом чисел значение на выходе равно "0". Как Вы предполагаете поменять знак этому числу?
Rovki писал(а):
15.07.2022{, 11:54}
Сейчас знак можно поменять только после ввода числа
Возьмите любой калькулятор, хоть приложение, хоть "железный" - это везде так.
Rovki писал(а):
15.07.2022{, 11:54}
Как в жизни- пишем сначала минус, а потом вводим цифры.
Только на клочке бумаги карандашом так бывает.
Rovki писал(а):
15.07.2022{, 11:54}
2.Добавить выход INT- для целых чисел. Нажатие вначале на * (как выше) приводит к смене знака с + на -. Если число введено (не равно нулю) ,то нажатие * игнорируется(нет десятичной точки).При сбросе на входе, значение (как раньше) устанавливается в ноль ,а знак +.
А вот это не смог осознать. Если не трудно, перефразируйте пожалуйста. До меня иногда туго доходит. :)

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ввод числа с клавиатуры

#14

Сообщение Rovki » 15.07.2022{, 14:04}

Так вроде цель приблизить блоки не к старым калькуляторам, а к "человеческому языку" :smile37: , так как делает человек на бумаге и говорит так ,и это естественно .
минус.png
это калькулятор в винде(стандартный)- нажимаем "-" потом число , минус появляется после нажатия интер. Наверное можно запомнить(флаг) ,что первым (после сброса) символом был нажат *(-) и отобразить его после ввода числа???
Нужно не нулю менять знак на минус, а после ввода первого числа .
Так бывает(пишут) не только на клочке бумаге , но и научных книгах :)
На выходе INT целое со знаком число - можно взять из лонг интеджер старший регистр . Установка знака при любом типе данных аналогична - при начальном нажатии * делает число отрицательным . Для дробных чисел" *" имеет два назначения - знак и десятичная точка, Для целых только знак.
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#15

Сообщение Dryundel » 15.07.2022{, 14:14}

Rovki писал(а):
15.07.2022{, 14:04}
это калькулятор в винде(стандартный)- нажимаем "-" потом число , минус появляется после нажатия интер.
Так это Вы от 0 отняли число. Нажали равно и получили результат.
В левом нижнем углу калькулятора, есть клавиша "Смена знака", вот с ней и пробуйте.
Rovki писал(а):
15.07.2022{, 14:04}
На выходе INT целое со знаком число - можно взять из лонг интеджер старший регистр . Установка знака при любом типе данных аналогична - при начальном нажатии * делает число отрицательным . Для дробных чисел" *" имеет два назначения - знак и десятичная точка, Для целых только знак.
Ааааааааааааааааааа... нефига не понял.
.
Ща сделаю специально для Вас.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ввод числа с клавиатуры

#16

Сообщение Rovki » 15.07.2022{, 14:27}

Дело в том ,что на клаве всего два служебных символа - *.# . А хочется и целые и дробные уставки задавать и отрицательные значения ...
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#17

Сообщение Dryundel » 15.07.2022{, 14:40}

Вот, держи. Хоть перед смену знака нажимай, хоть после.
Rovki писал(а):
15.07.2022{, 14:27}
Дело в том ,что на клаве всего два служебных символа - *.# . А хочется и целые и дробные уставки задавать и отрицательные значения
Так поставь доп кнопку на Reset например.
Ну или надо LongPress к блоку прикручивать.
Подумаю...
Возможно..
:)

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ввод числа с клавиатуры

#18

Сообщение Rovki » 15.07.2022{, 15:15}

Dryundel писал(а):
15.07.2022{, 14:40}
Вот, держи. Хоть перед смену знака нажимай, хоть после.
Ввод числа с матричной клавиатуры for Rovki.flp
Rovki писал(а):
15.07.2022{, 14:27}
Дело в том ,что на клаве всего два служебных символа - *.# . А хочется и целые и дробные уставки задавать и отрицательные значения
Так поставь доп кнопку на Reset например.
Ну или надо LongPress к блоку прикручивать.
Подумаю...
Возможно..
:)
Спасибо , но у меня нет свободных входов на есп и нет возможности ставить отдельную кнопку :smile469:

Отправлено спустя 17 минут 55 секунд:
Придется делать внешней логикой :smile44:

Отправлено спустя 13 минут 50 секунд:
Как вариант -
минус.png
Отправлено спустя 13 минут 42 секунды:
Работает-
Screenshot_2022-07-15-15-57-13-911_ru.kablov.kascada_full.modbus.jpg
Отправлено спустя 1 минуту 12 секунд:
Вопрос- как изменить частоту импульсов на строках штатного блока ?
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ввод числа с клавиатуры

#19

Сообщение Dryundel » 15.07.2022{, 16:25}

Rovki писал(а):
15.07.2022{, 16:02}
Спасибо , но у меня нет свободных входов на есп и нет возможности ставить отдельную кнопку
Сделал. Тестируйте.
Ктопка #
Для Int - короткое нажатие Backspace, длинное - Reset
Для Float - короткое нажатие Точка, длинное - Reset
Отдельного входа Reset теперь нет. .
Rovki писал(а):
15.07.2022{, 16:02}
Вопрос- как изменить частоту импульсов на строках штатного блока ?
А никак. Частота зависит от частоты основного цикла.
Блок работает без прерываний. Импульсы и считывание идут в каждом цикле.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ввод числа с клавиатуры

#20

Сообщение Rovki » 15.07.2022{, 17:03}

Работает, спасибо

Отправлено спустя 1 минуту 53 секунды:
Штатный блок клавы конфликтует с модбас (срабатывают тайменги). Приходится реже опрашивать регистр
Электронщик до мозга костей и не только

Ответить

Вернуться в «Дисплеи, индикаторы и клавиатуры»