Создание пароль с клавиатурой PS/2 и arduino uno
- Войдите на сайт для отправки комментариев
Пт, 10/02/2017 - 15:23
Добрый день, работать с ардуино я начал совсем недавно, сейчас пытаюсь написать скеч чтобы после набора определенных клавишь на клавиатуре PS/2 загорался диод, пока у меня получился такой код, после загрузки его на ардуинку пытаюсь ввести пароль но ничего не происходит, ардуинка никак неотвечает на нажатия клавишь. Клавиатура подсоединена правильно к ардуино, проверял на другом счетче, но там было использованно только 2 кнопки, а мне нужна именно после ввода нескольких кнопок загорание диода. Немогу понять в чем дело.
#include <PS2Keyboard.h>
volatile uint8_t q = 1, w; // Переменные, для считывания скан-кода клавиши клавиатуры.
int j=0;
void setup() {
Serial.begin(57600);
pinMode(13, OUTPUT); // LED. Нажатие клавиш, подтверждаем миганием светодиода.
attachInterrupt(1, ps2Keyboard, FALLING); // Прерывание 1,(3-pin Arduino соединяем с(CLK/CLOCK на клавиатуре). attachInterrupt(1, ps2Keyboard, FALLING);
}
void loop() {
delay(1000); q = 1; w = 0; // Восстановим значения, переменных.
}
void ps2Keyboard() { // Функция, для получения 8-и битного скан кода.
if (q > 1 && q < 11)w |= digitalRead(2) << q - 2; // (2-pin на Arduino) соединяем (DATA на клавиатуре).
if (++q > 11) { // Получаем код клавиши.
Serial.println(w, HEX);
if (w == 0x32)
{
j = 1;
}
else if ( w == 0x44)
{
j = 2;
}
else if ( w == 0x1B)
{
j = 3;
}
else if ( w == 0x1B)
{
j = 4;
}
else if ( w == 0x5A)
{
j = 5;
}
else if (j == 5)
{
digitalWrite(13, HIGH);
}
else
{
j = 0;
}
}
q = 1; w = 0;
}
Так она ж у Вас вообще ничего не делает.
Ставьте палец на строчки, ведите и рассуждайте.
Итак, переменная q имеете значение 1 (строка 3)
Допустим, что произошло перрывание и вызвана функция ps2Keyboard. Что в ней происходит
1. Проверка в строке 14 ложна, т.к. q у нас равна 1.
2. Проверка в строке 15 тоже ложна, т.к. ++q у нас равно 2
3. Программа переходит к строке 46, где снова делает q равной 1
Всё, при следующем прерывании происходит тоже самое, при третьем, четвёртом, ... 100500-ом всё одинаково.
Программа ничего не делает вообще.
А могли бы вы дать совет о том как реализовать задуманное?
Да, нет, наверное. Во-первых, я не очень понимаю, что задумано, а во-вторых, какие тут могут быть советы - я ж показал Вам как проговоаривать каждую строчку. Вот так и проговаривайте - говорите себе вслух что Вы хотите делать и пишите соответвуюую строчку. Так и напишете.