Помогите с матричной клавиатурой
- Войдите на сайт для отправки комментариев
Чт, 14/01/2016 - 13:42
Подключил матричную клавиатуру к Arduino Mega 2560 R3. Всё работает отлично, но хотелось бы сделать так: нажимаю на звездочку - ввожу старый код - ввожу новый код - сохраняется. Как это реализовать можно?
#include <Keypad.h>
char* secretCode = "1234";
int position = 0;
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);
int redPin = 12;
int greenPin = 53;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
setLocked(true);
}
void loop()
{
char key = keypad.getKey();
if (key == '#') {
position = 0;
setLocked(true);
}
if (key == secretCode[position]) {
position++;
}
if (position == 6) {
setLocked(false);
}
delay(50);
}
void setLocked(int locked)
{
if (locked) {
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
}
else {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
}
Также хотил спросить по саму микруху. Это нормально, что она после 20-25 минут на ощупь теплая?
Попробуй так:
if (key == '*') { char oldCode[4]; for (i=0; i<4; i++) oldCode[i] = keypad.getkey(); //по идее надо проверить, что старый код совпадает с ранее запомненным char newCode[4]; for (i=0; i<4; i++) newCode[i] = keypad.getkey(); //а тут надо сохранить где-то новый код }void loop() { char key = keypad.getKey(); if (key == '*') { while ((key == '*') || (key == NO_KEY) ){ key = keypad.getKey();} secretCode[0] = key; while ((key ==secretCode[0]) || (key == NO_KEY) ){ key = keypad.getKey();} secretCode[1] = key; while ((key ==secretCode[1]) || (key == NO_KEY) ){ key = keypad.getKey();} secretCode[2] = key; while ((key ==secretCode[2]) || (key == NO_KEY) ){ key = keypad.getKey();} secretCode[3] = key; } if (key == '#') { position = 0; setLocked(true); } if (key == secretCode[position]) { position++; } if (position == 6) { setLocked(false); } delay(50); }Как-то так, конечно по китайски, зато понятно. Можно в цикл загнать.
Попробуй так:
вот не пройдет компиль топикстартер спросит почему?
и не уверен что все 4 цифры кода не получаться одинаковыми с одного нажатия. может это в библе и реализовано.
Ок, спасибо!
А по поводу температуры ничего? Сейчас подключил матричную клавиатуру и дисплей HD44780. Спустя пару минут - микруха теплая, градусов под 40-45.