Создание пароль с клавиатурой PS/2 и arduino uno

badebum
Offline
Зарегистрирован: 10.02.2017

Добрый день, работать с ардуино я начал совсем недавно, сейчас пытаюсь написать скеч чтобы после набора определенных клавишь на клавиатуре 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;                          
  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так она ж у Вас вообще ничего не делает.

Ставьте палец на строчки, ведите и рассуждайте.

Итак, переменная q имеете значение 1 (строка 3)

Допустим, что произошло перрывание и вызвана функция ps2Keyboard. Что в ней происходит

1. Проверка в строке 14 ложна, т.к. q у нас равна 1.

2. Проверка в строке 15 тоже ложна, т.к. ++q у нас равно 2

3. Программа переходит к строке 46, где снова делает q равной 1

Всё, при следующем прерывании происходит тоже самое, при третьем, четвёртом, ... 100500-ом всё одинаково.

Программа ничего не делает вообще.

badebum
Offline
Зарегистрирован: 10.02.2017

А могли бы вы дать совет о том как реализовать задуманное?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет, наверное. Во-первых, я не очень понимаю, что задумано, а во-вторых, какие тут могут быть советы - я ж показал Вам как проговоаривать каждую строчку. Вот так и проговаривайте - говорите себе вслух что Вы хотите делать и пишите соответвуюую строчку. Так и напишете.