Создание пароль с клавиатурой 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-ом всё одинаково.
Программа ничего не делает вообще.
А могли бы вы дать совет о том как реализовать задуманное?
Да, нет, наверное. Во-первых, я не очень понимаю, что задумано, а во-вторых, какие тут могут быть советы - я ж показал Вам как проговоаривать каждую строчку. Вот так и проговаривайте - говорите себе вслух что Вы хотите делать и пишите соответвуюую строчку. Так и напишете.