Существует несколько возможных причин, почему Arduino может неправильно распознавать нажатия на аналоговую клавиатуру 3x4 и отображать только 1 или 10.
1. Неправильное подключение: Убедитесь, что все провода от клавиатуры правильно подключены к пинам ардуино. Проверьте, что каждая кнопка подключена к уникальному пину и общему пину (обычно GND).
2. Неисправность клавиатуры: Проверьте, что клавиатура работает должным образом. Протестируйте каждую кнопку, используя мультиметр или другой метод, чтобы удостовериться, что она создает правильное соединение при нажатии.
3. Неправильные значения порта: Возможно, в вашем коде неправильно заданы значения порта. Проверьте документацию для вашей конкретной клавиатуры или используйте мультиметр, чтобы определить правильные значения при нажатии каждой кнопки.
Для изменения кода для правильного считывания чисел с клавиатуры 3x4 вам нужно правильно связать значения кнопок с числами. Вам нужно знать, какое значение ожидается при нажатии каждой кнопки на клавиатуре. Например, если при нажатии кнопки "1" должно быть возвращено значение 1, вам нужно обновить соответствующую часть кода.
Вот пример кода, который может помочь вам:
```c++
const int ROWS = 4; // количество строк на клавиатуре
const int COLS = 3; // количество столбцов на клавиатуре
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROWS] = {9, 8, 7, 6}; // пины подключены к строкам
byte pin_cols[COLS] = {5, 4, 3}; // пины подключены к столбцам
void setup() {
Serial.begin(9600);
for (int r = 0; r < ROWS; r++) {
pinMode(pin_rows[r], INPUT_PULLUP); // установка пинов строк в режим INPUT_PULLUP
}
for (int c = 0; c < COLS; c++) {
pinMode(pin_cols[c], OUTPUT); // установка пинов столбцов в режим OUTPUT
digitalWrite(pin_cols[c], HIGH); // исключение пинов столбцов из цепи
}
}
void loop() {
for (int c = 0; c < COLS; c++) {
digitalWrite(pin_cols[c], LOW); // подключение пина столбца к земле
for (int r = 0; r < ROWS; r++) {
if (digitalRead(pin_rows[r]) == LOW) { // кнопка нажата
Serial.print("Pressed: ");
Serial.println(keys[r][c]); // вывод значения кнопки
// задержка для подавления дребезга контактов
delay(200);
}
}
digitalWrite(pin_cols[c], HIGH); // исключение пина столбца из цепи
}
}
```
В этом коде создается массив с размещением кнопок на клавиатуре, а также массивы для пинов строк и столбцов. При нажатии кнопки выводится соответствующее значение. Этот код может быть изменен для вашей конкретной клавиатуры, используя правильные значения. Проверьте правильность подключения и сверьте