Использование клавиатуры 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").

, 👍0

Обсуждение

Привет и добро пожаловать! Каков ваш актуальный вопрос?, @Ghanima

из этого кода я должен получить ввод с клавиатуры и передать значение, чтобы задержать светодиод, @DANIEL NTIM-ADU SAITO

Я что-то упустил, по какой-то причине вы не можете инициализировать раскладку клавиатуры, чтобы она содержала 3, а не «3»? Это массив из 8-битных значений, почему бы не установить в нем нужные вам числа, а не текстовые символы?, @Andrew


2 ответа


1

Ваша проблема в том, что у вас есть соответствие нажатия клавиш внутри цикла while. Это означает, что, совпав один раз, он будет продолжать совпадать снова и снова до бесконечности. Вам нужно заменить while на if, поэтому он запускается только один раз для каждого нажатия клавиши.

,

2

Вы можете легко прочитать эту строку кода

value = anyDigitFromKeypad - 48

например, значение = "3"-48 = 3

,

Я бы написал «0», а не «48». Эти два эквивалентны, но первый делает более ясным, что вы вычитаете кодовую точку цифры ноль., @Edgar Bonet