Клавиатура 4х4.
- Войдите на сайт для отправки комментариев
Вс, 15/11/2015 - 18:14
Товарищи прошу помощи в организации алгоритма считывания!
В наличии есть arduino mega 2560 и мембранная клавиатура 4х4, необходимо разработать код для считывния 2 и более символов с клавиатуры и записи в переменную, ну то есть нажали 1 потом 2 и на выходе получили 12, контролем начала и конца ввода является кнопка *, собственно со считыванием одного числа я разобрался но вот как считать 2 и более не вкуриваю.
P.S использую библиотеку Keypad.h.
P.P.S пример кода считавания на котором основывался.
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {3, 2, 1, 0};
byte colPins[COLS] = {7, 6, 5, 4};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
необходимо разработать код для считывния 2 и более символов с клавиатуры и записи в переменную, ну то есть нажали 1 потом 2 и на выходе получили 12, контролем начала и конца ввода является кнопка *, собственно со считыванием одного числа я разобрался но вот как считать 2 и более не вкуриваю.
Зарезервировать массив, размерностью равной количеству цифр в максимально ожидаемом вводимом числе, например, для чисел от 0 до 9999
byte num[4];
Потом в цикле, пока не будет нажата '*' (или как понравится), позаполнять массив полученными значениями нажимаемых кнопок (попутно отсеивая ненужные значения типа 'A'-'D' и '#' и можно сразу преобразовывая '0' в 0, '1' в 1 и т.д.).
Перед каждой записью новой цифры в num[0] сдвигать num[3] в num[4], num[2] в num[3], num[1] в num[2], num[0] в num[1].
В итоге, просто посчитать, что у нас получилось:
itogo = num[0] + 10*num[1] + 100*num[2] + 1000*num[3];
Если нужное число всегда фиксированной длины (например, от 1111 до 9999) то и сдвигать в середине массива ничего не надо, а просто считать последовательно четыре цифры, записать их в num[3] - num[0] и сложить по той же формуле.
Вообще-то массив не нужен. Даже если число имеет произвольный формат.
Первоначально число инициализируется нулем.
При нажатии на кнопку анализируется, что именно нежето: если цифровая клавиша, число умножается на 10 и к нему прибавляется величина, соответствующая кнопке. Если нажата кнопка завершения (например, "*", как предложено выше). Набор числа прекращается и продолжается выполнение программы (например, манипуляции с этим числом).