Использование клавиатуры 4*4 для ввода целочисленного значения
У меня клавиатура 4*4, и я хочу использовать ее для ввода цифр. Затем я буду использовать это число в качестве задержки для светодиода или двигателя, чтобы он работал в течение указанного времени. Это мой пример кода:
#include<Keypad.h>
#include<LiquidCrystal.h>
const byte numRows = 4; //количество строк на клавиатуре
const byte numCols = 4; //количество колонок на клавиатуре
char keymap[numRows][numCols]=
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'X', '0', 'Y', 'D'}
};
char value[4]="";
int index = 0;
byte rowPins[numRows] = {22,23,24,25}; // Строки от 0 до 3
byte colPins[numCols]= {26,27,28,29}; // Столбцы от 0 до 3
Keypad key= Keypad(makeKeymap(keymap), rowPins, colPins, numRows,numCols);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
lcd.begin(20,4);
lcd.print(" WELCOME ");
delay(100);
}
void loop() {
char keypress = key.getKey();
while (keypress != NO_KEY){
if (keypress == 'X'){
lcd.clear();
for(int j=0;j<=4;j++){
value[j]=0;
}
index=0;
}
else if (keypress == 'Y'){
int amt = atoi(value);
digitalWrite(13, HIGH);
delay(amt);
}
else
value[index]=keypress;
index++;
}
}
Как прочитать значение, возвращаемое клавиатурой, как целое число? (Когда я нажимаю 3, я хочу прочитать 3, а не "3").
2 ответа
Ваша проблема в том, что у вас есть соответствие нажатия клавиш внутри цикла while. Это означает, что, совпав один раз, он будет продолжать совпадать снова и снова до бесконечности. Вам нужно заменить while на if, поэтому он запускается только один раз для каждого нажатия клавиши.
Вы можете легко прочитать эту строку кода
value = anyDigitFromKeypad - 48
например, значение = "3"-48 = 3
Я бы написал «0», а не «48». Эти два эквивалентны, но первый делает более ясным, что вы вычитаете кодовую точку цифры ноль., @Edgar Bonet
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Как работать с аналоговыми контактами в цикле?
- Какие есть другие IDE для Arduino?
- Как использовать переменные и функции в нескольких файлах .ino
- Разница между void setup() и void setup(void)
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
Привет и добро пожаловать! Каков ваш актуальный вопрос?, @Ghanima
из этого кода я должен получить ввод с клавиатуры и передать значение, чтобы задержать светодиод, @DANIEL NTIM-ADU SAITO
Я что-то упустил, по какой-то причине вы не можете инициализировать раскладку клавиатуры, чтобы она содержала 3, а не «3»? Это массив из 8-битных значений, почему бы не установить в нем нужные вам числа, а не текстовые символы?, @Andrew