Подача значений в массив с помощью клавиатуры, подключенной к Arduino Uno.
Я пытаюсь ввести значения клавиатуры в массив. Код компилируется без ошибок. При запуске кода код переходит в цикл for и печатает «m» на ЖК-дисплее, но не выполняет «customKey = customKeypad.getKey();» и приведенные ниже шаги продолжают печатать «m» 5 раз. Я не могу вводить значения с клавиатуры. Пожалуйста, помогите.
#include <LiquidCrystal.h>
#include <Keypad.h>
const int rs = A1, en = A0, d4 = A2, d5 = A3, d6 = A4, d7 = A5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
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] = { 13, 12, 11, 10 };
byte colPins[COLS] = { 9, 8, 7, 6 };
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS,
COLS);
//Строка inputString = "";
char customKey;
char a[5];
void setup() {
Serial.begin(9600);
//inputString.reserve(200);
lcd.begin(16, 2);
}
void loop() {
lcd.clear();
if (Serial.read() == '1') {
lcd.setCursor(0, 0);
lcd.print("WELCOME !");
delay(1000);
lcd.clear();
lcd.print("Enter UserID :");
lcd.setCursor(0, 1);
for (int i = 0; i < 5; i++) {
lcd.print('m');
customKey = customKeypad.getKey();
delay(30);
if (customKey) {
lcd.print('*');
a[i] = customKey;
}
if (i == 5) {
a[i] = '\0';
break;
}
delay(1000);
}
}
}
@maheshmt, 👍0
1 ответ
▲ 2
customKeypad.getKey();
не ждет нажатия клавиши. он возвращает 0, если ни одна клавиша не нажата.
вам следует переписать скетч в версию, в которой цикл() может зацикливаться и нажатия клавиш считываются по мере их нажатия.
,
@
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Неужели нет другого пути? Я проверяю Serial.read()=='1', потому что мне нужно получить последовательный вывод '1' от zigbee, подключенного к Arduino, чтобы перейти к используемому идентификатору., @maheshmt
Вам не обязательно переписывать эскиз, но стоит. Определенно лучше писать неблокирующий код, потому что тогда вы сможете добавить другие функции, которые, по-видимому, будут выполняться одновременно. Если вы действительно этого не хотите, просто поместите команду getKey() внутри оператора while(customKey == 0). Программа будет заблокирована до тех пор, пока не будет нажата клавиша., @chrisl
перезапись требует использования переменной состояния. затем он может включать состояние «ожидания» до того, как «1» была получена через последовательный порт., @kamen