Arduino, ввод чисел
- Войдите на сайт для отправки комментариев
Втр, 20/12/2016 - 10:31
Как на Arduino вводить с клавиатуры 3-х значные числа, для дальнейшего их использования в вычислениях?
Как на Arduino вводить с клавиатуры 3-х значные числа, для дальнейшего их использования в вычислениях?
Я понимаю так:
Опрос клавиатуры - запоминание введенного числа в ячейку.
далее опрос и запоминание в другую ячейку, и так до клавиши "Ввод".
А как потом преобразовать все это в одно чило? Или это всё делается по другому?
nikvas, погуглите про функцию Serial.parseInt() откроете для себя мир новых возможностей :)
Спасибо!
Попробую с этим разобраться.
Всё ОК. Ещё раз СПАСИБО!!
Прошу прощение за назойливость.
Serial.parseInt() прикрасно работает при вводе с монитора порта (через компьютер), а мне надо вводить со своей клавиатуры без связи с компьютером.
Никак не могу этого добиться.
Какая клавиатура? Как подключена? Как проводите ее опрос? Лучше прям сразу текущий код выложить.
Клавиатура 4х4. Кода нет, по тому что не знаю как вводить с клавиатуры 3-х значные числа, для дальнейшего их использования в вычислениях? Вот моя программа ввода и отображения на ЖКИ, но это однозначное число, а мне надо вводить 3х значное.
При использование функции Serial.parseInt() все прекрасно работает, но только через компьютер на системный монитор.
Вот что я намудрил:
И всётаки, КАК ВВОДИТЬ с отдельной клавиатуры 3-х значные (и более) числа???
Использование системного монитора не нужно (я вообще не понимаю его назначение).
Arduino должен работать как самостоятельный узел.
Ну, например, как-то так (среды нет под рукой, в блокнотике ваш код поправил, так что могут быть косяки с синтаксисом). Да и с библиотекой клавы я не работал, судя по описанию, там можно более красиво нажатие кнопок отслеживать.
//клава 4х4 с выводом на ЖК 16х2 #include <Wire.h> #include <LiquidCrystal_I2C.h> // Подключаем библиотеку индикатора и I2C - LiquidCrystal_I2C_V112 LiquidCrystal_I2C lcd(0x27, 16,2); #include <Keypad.h> // Подключаем библиотеку кнопок const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; //красные byte colPins[COLS] = {7, 6, 5, 4}; //синие Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); int data=0; boolean first=true; void setup() { lcd.init(); lcd.backlight();// Включаем подсветку дисплея lcd.print("Klava 4x4"); Serial.begin(9600); } void loop(){ char key = keypad.getKey(); //опрос клавиатуры if(key){ if(first){ first=false; if(isDigit(key)){ data = data*10+key-48; lcd.clear(); //очистить дисплей lcd.setCursor(6, 1); //курсор на вторую строчку (Первая-0, вторая-1), 6 символ lcd.print(key); //вывод на экран знака кнопки lcd.setCursor(10, 1); //курсор на вторую строчку (Первая-0, вторая-1), 10 символ lcd.print(data); //вывод на экран число }else{ //обрабатываем нажатие не цифровых клавиш } } }else if (!first){ first=true; } }Большое спасибо за участие!
Представленные мною коды все рабочие. В первом скетче можно ввести только ОДНОзначное число,
а во втором все прекрасно работает но ТОЛЬКО с клавиатуры компьютера и через системный монитор, а мне надо ввод со своей клавиатуры и без участия компьютера.
Мне не понятно как вводдить трех значное число со своей клавиатуры, что бы потом его использовать.
И что, тот код, что я дал, не заработал?
Это не то. Это ввод знаков (просто со сдвигом) но не одного числа. при вводе переменная равна поледнему введеному знаку. Мне надо ввести 532 (сохраненное в одной переменной), а не 5, 3 и 2.
В вашем скетче вводятся цифры со сдвигом и в переменной сохраняется только последнее введенное число. И нет команды конца ввода.
Нда... Кто вам это сказал? Плюньте ему в глаз. В переменной data хранится введенное число, хоть одно, хоть дву, хоть трехзначное, хоть... на сколько типа integer хватит. Понадобится больше - переделаете переменную в long.
Конец ввода не стал писать специально, но место под обработку обозначил. Его надо писать в строке 44, назначив в качестве ввода одну из нецифровых клавиш. Либо, если число всегда трехзначное, завести счетчик и, после ввода третьей цифры, делать автоматический ввод/обработку числа.
Уважаемый "okta" скажите что в вашем коде делают строки:
if(first){
if(isDigit(key)){
не могу найти их описание, а использовать в слепую не очень хочется. Ваш код наверно то что надо.
first - переменная, которую я ввел для проверки, что кнопка была нажата, но еще не отпущена (что бы пока клавишу не отпустят одну и туже цифру несколько раз не записывать). В принципе, этот функционал должен быть в библиотеке, но лезть разбираться не хочется.
isDigit(key)
Да, дребезг в библиотеке обрабатывается. Спасибо за ссылку, буду разбираться.
Дребезг как раз таки я отдал на откуп библиотеке. Я имел в виду, что если кнопку нажали и держат, то цифра будет введена один раз, а не сколько раз сработает функция чтения кнопки.
Дребезг как раз таки я отдал на откуп библиотеке. Я имел в виду, что если кнопку нажали и держат, то цифра будет введена один раз, а не сколько раз сработает функция чтения кнопки.
Не понимаете вы главного. Это раньше были программы. Введите 1 число, ввели, введите 2 число ввели, посчитали и вывели результат. Если хотите посчитать снова введите 1. Ну и дальше по кругу. Тогда ввод числа имеет смысл. Тем более в таком режиме можно написать функции INKEY() и INPUT(). Но сейчас в моде структуры в виде меню. А значит не удобны такие функции.
ПС: У вас есть кнопки "А","B","C","D". Та вот их можно использовать так "А" - это HOME. Переход в начало меню, "B" - очистка полностью число , то есть =0, "C" это DELETE удаление последнего знака, "D" 'это ENTER-ввод числа который на экране.
Большое спасибо!! Все решено. Мне нехватало только одной строчки (сам не смог додуматься)
data=data*10+key-48
Вопрос решен! Всем большое спасибо!!!
подскажите, а как же сделать из дополнительных клавиш A B -
1) удаление последнего символа
2) полное удаление введенных данных