Проблема с условием
- Войдите на сайт для отправки комментариев
Втр, 04/06/2019 - 17:02
Добрый день. Подскажите куда копать. Условие отрабатывает наполовину. При поднесении карточки ПК блокируется, но при поднесении карты к заблокированному не даёт никакого результата.
// Подключаем библиотеку для управления клавиатурой
#include <Keyboard.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
int a = 0;
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для хранения номера метки в десятичном формате
void setup() {
Serial.begin(9600);
SPI.begin(); // инициализация SPI
mfrc522.PCD_Init(); // инициализация MFRC522
Keyboard.begin();
delay(1000);
}
void loop() {
// Поиск новой метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор метки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec * 256 + uidDecTemp;
}
Serial.println("Card UID: ");
Serial.println(uidDec); // Выводим UID метки в консоль.
if (uidDec == 13654906) // Сравниваем Uid метки, если он равен заданому
{
if (a == 0)
{
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('l');
delay(500);
Keyboard.releaseAll();
a = 1;
}
else
{
delay(5000);
}
}
else if (a == 1)
{
Keyboard.println("1");
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
a = 0;
}
}
Вы бы пояснили, что означают if'ы в №№40 и 53, а то по сейчас мне кажется, что Вы блокируете, когда краточка совпала, а разьлокируете, когда не совпала (т.е. левой карточкой).
переменная a выполняет роль флага. ею я отслеживаю статус пк, разблокирован или заблокирован, чтобы при заблокированном пк он ещё раз не пытался блокироваться при поднесении карточки.
Вы бы пояснили, что означают if'ы в №№40 и 53, а то по сейчас мне кажется, что Вы блокируете, когда краточка совпала, а разьлокируете, когда не совпала (т.е. левой карточкой).
Полностью соглашусь.
Чуток с else напутано. (Поменяйте их местами).
пишите комменты на свой код, а то код из инета прокомментирован, а ваш нет.
Вы бы пояснили, что означают if'ы в №№40 и 53, а то по сейчас мне кажется, что Вы блокируете, когда краточка совпала, а разьлокируете, когда не совпала (т.е. левой карточкой).
Полностью соглашусь.
Чуток с else напутано. (Поменяйте их местами).
Всем спасибо, ошибку нашёл.
if (uidDec == 13654906) // Сравниваем Uid метки, если он не равен заданому { if (a == 0) { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('l'); delay(500); Keyboard.releaseAll(); a = 1; delay(1000); } else { Keyboard.press(KEY_LEFT_CTRL); Keyboard.releaseAll(); delay (250); Keyboard.println("1"); Keyboard.press(KEY_RETURN); Keyboard.releaseAll(); a = 0; delay(1000); } }Всем спасибо, ошибку нашёл.
Я бы сказал, Нуидела с Петровичем нашли и ткнули носом, но всё равно, молодец! :)))
Всем спасибо, ошибку нашёл.
Я бы сказал, Нуидела с Петровичем нашли и ткнули носом, но всё равно, молодец! :)))
так поэтому и нашёл, что ткнули
Подскажите, как можно реализовать проверку наличия карты? то есть если карту убрали должны совершаться действия. проверка по uid карты такого эффекта не даёт. если карту не прикладывать - ничего не происходит.
Подскажите, как можно реализовать проверку наличия карты? то есть если карту убрали должны совершаться действия. проверка по uid карты такого эффекта не даёт. если карту не прикладывать - ничего не происходит.
Когда карту приложили - взводишь флаг "карта приложена", запоминаешь время прикладывания карты. И постоянно проверяешь: если взведён флаг "карта приложена", то: если карта ещё приложена - обновляешь время, если карты на считывателе нет, то проверяешь - если разница между текущим временем и временем последнего детектирования карты больше, чем определённый интервал - выполняешь определённые действия, и сбрасываешь флаг "карта приложена". В псевдокоде это выглядит примерно так:
bool isCardPresent = false; uint32_t cardPresentTime = 0; void loop() { bool nowCardPresent = checkIfCardPresent(); if(nowCardPresent) { cardPresentTime = millis(); isCardPresent = true; } if(isCardPresent) { if(nowCardPresent) { cardPresentTime = millis(); } else { if(millis() - cardPresentTime > INTERVAL) { isCardPresent = false; doSomeJob(); } } } }