Помогите разобраться (Матричная клавиатура 3*3 и меню)
- Войдите на сайт для отправки комментариев
Пт, 26/02/2016 - 23:42
Товарищи, помогите разобраться. Пытаюсь организовать простое меню на ардуино с использованием матричной клавиатуры(3*3). При нажатии на 4 и 6 должны листаться пункты меню, вперед и назад, соответственно. А при нажатии на 2 и 8 изменяться значения переменных. Суть проблемы: при нажатии на 4 и 6 листается только вперед, при всем этом 5-ка тоже пролистывает, а 2 и 8 вообще не отрабатывают. Подскажите, пожалуйста, как быть?
#include <Keypad.h> #include <LiquidCrystalRus.h> const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = {8, 7, 6, 5}; byte colPins[COLS] = {4, 3, 2}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // инициализация LCD LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); int menu = 0; int speed = 0; int time = 0; void setup() { lcd.begin(16, 2); } void loop() { if (keypad.getKey() == '4') { menu++; lcd.clear(); delay (100); if (menu > 2) { menu = 0; } } if (keypad.getKey() == '6') { menu--; lcd.clear(); delay (100); if (menu < 0) { menu = 2; } } if ((keypad.getKey() == '2') && (menu == 1)) { speed++; delay(100); lcd.clear(); if (speed > 100) { speed = 0; } } if ((keypad.getKey() == '2') && (menu == 2)) { time++; delay (100); //lcd.clear(); if (time > 100) { time = 0; } } if ((keypad.getKey() == '8') && (menu == 1)) { speed--; delay(100); lcd.clear(); if (speed < 0) { speed = 0; } } if ((keypad.getKey() == '8') && (menu == 2)) { time--; delay (100); //lcd.clear(); if (time < 0) { time = 0; } } if (menu == 0) { lcd.setCursor(0, 0); lcd.print("All information:"); lcd.setCursor(0, 1); lcd.print("Speed="); lcd.print(speed); lcd.print(" time="); lcd.print(time); } else if (menu == 1) { lcd.setCursor(3, 0); lcd.print("Speed:"); lcd.setCursor(0, 1); lcd.print(speed); // lcd.clear(); } else if (menu == 2) { lcd.setCursor(5, 0); lcd.print("Time:"); lcd.setCursor(0, 1); lcd.print(time); // lcd.clear(); } }
судя по скетчу, вы одни и теже пины используете и для дисплея и для клавиатуры. Программно при таком соединении это не решить. Ищите как развести кнопки и дисплей по разным пинам.
ну и в качестве примера ключевых слов: i2c
судя по скетчу, вы одни и теже пины используете и для дисплея и для клавиатуры. Программно при таком соединении это не решить. Ищите как развести кнопки и дисплей по разным пинам.
Спасибо за совет, я попробовал использовать незанятые пины, эффект тот же(пункты меню листаются, значения параметров без изменений)
Определись какая клавиатурная матрица используется 3x3 или 4x3
Да и в 6-й и 7-й стоке беда помоему
судя по скетчу, вы одни и теже пины используете и для дисплея и для клавиатуры. Программно при таком соединении это не решить. Ищите как развести кнопки и дисплей по разным пинам.
Спасибо за совет, я попробовал использовать незанятые пины, эффект тот же(пункты меню листаются, значения параметров без изменений)
Так вам ни кто не скажет, что там у вас происходит. Попробуйте без дисплея, выводить с клавиатуры всё в сериал компа.
PS А примеры библиотеки клавы сами по себе работают?
Так вам ни кто не скажет, что там у вас происходит. Попробуйте без дисплея, выводить с клавиатуры всё в сериал компа.
PS А примеры библиотеки клавы сами по себе работают?
В сериал, стандартными методами из либы, все значения выводятся верно.
Я скажау больше, они выводились верно, даже тогда, когда клавиатура была подключена на те же пины что и дисплей.
Определись какая клавиатурная матрица используется 3x3 или 4x3
Да и в 6-й и 7-й стоке беда помоему
Моя ошибка, клавиатура 4*3
Определись какая клавиатурная матрица используется 3x3 или 4x3
Да и в 6-й и 7-й стоке беда помоему
Моя ошибка, клавиатура 4*3