Ввод с Мембранной клавиатуры 4 х 4
- Войдите на сайт для отправки комментариев
Ср, 11/11/2015 - 10:06
Добрый день! Мембранная клавиатура с библиотекой Keypad, передает нажатые символы по одному. Подскажите как мне получить число в переменную Byte например 12. Планирую настраимать с ее помощью RTC часы и вводить время таймеров. Вот код в котором с которым я эксперементирую.
#include <Keypad.h> // Подключаем библиотеку
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char array [10];
char str1[5];
int i =0;
byte t;
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 );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey(); // читаем клавиатуру
if (key){ // если символ был нажат
Serial.println(key); // Передаем название нажатой клавиши в сериал порт
if (key == '#')
{str1[i] = '\0';
Serial.println(str1);
for(int a = 0; a<5; a++)
{
t |= str1[a] << (4-a);
}
Serial.print(t);
Serial.println (" eto t");
// t = byte(str1[0]);
i = 0;
} //tone(3, (int)key*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд
// array [i] = key;
//i++;
//for (int a = 0; a < 2; a++)
str1[i] = key;
i++;}
Гдетто использовал нижепереведенное для ввода шестизначного параметра частоты.
Выод на LCD опционно...
long Getln(int col, int row) { long result; char input_string[6] = {' ',' ',' ',' ',' ',' '}; int counter=0; lcd.setCursor(col, row);lcd.print(" "); lcd.setCursor(col, row); lcd.cursor(); lcd.blink(); while (1) { key = keypad.waitForKey(); if (key == '#') break; input_string[counter]= key; lcd.print(input_string[counter]); counter++; if (counter ==6) break; } result = atol (input_string); lcd.setCursor(col, row); lcd.noCursor(); lcd.noBlink(); return result; }Выводить на экран у меня тоже получается с помощью строки или массива.
А вот как потом из него перекинуть в числовую переменную?? Чтоб образовалось одно число.
Выводить на экран у меня тоже получается с помощью строки или массива.
А вот как потом из него перекинуть в числовую переменную?? Чтоб образовалось одно число.
А в чем, собственно проблема? В школе программирование не преподавали?
тысячи*1000+сотни*100+десятки*10+единицы
поясните подробнее алгоритм. Допустим в строке число 2 и 3. что с ними делать чтоб получилось 23.
поясните подробнее алгоритм. Допустим в строке число 2 и 3. что с ними делать чтоб получилось 23.
вы серьезно?
2*10+3
Большое спасибо. Идея теперь понятна. Прошу прощения за глупые вопросы. Постараюсь воспроизвести это програмно.
.так ведь в 17 строке, где присвоение result и сидит ответ на Ваш исходный вопрос , а вывод на экран вторичен.
Я сделал вот так. Может коряво но работает. Была проблема с кнопкой 0. Никак не хотела выводится. Пришлось извратиться.
#include <Keypad.h> // Подключаем библиотеку const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца byte array [2]; byte s; byte s1; byte s2; byte i = 0; char keys[ROWS][COLS] = { {1, 2, 3, 100}, {4, 5, 6, 101}, {7, 8, 9, 102}, {105, 106, 104, 103} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void Klava(){ byte key = keypad.getKey(); // читаем клавиатуру if (key){ // если символ был нажат // Serial.println(key); // Передаем название нажатой клавиши в сериал порт if (key == 104) { s1 = array[0]; s2 = array[1]; if (s1==106) s1=0; if (s2==106) s2=0; s= 10*s1+s2; Serial.println(s); i =0; array[1] = 0; } else {array[i] = key; i++;}}} void setup(){ Serial.begin(9600); } void loop(){ Klava(); }