Помогите разобраться (Матричная клавиатура 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