#1 2017-10-07 20:25:36

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

RFID не получается сделать включение и выключение.

Приветствую!!!
Нужно, что бы с RFID метки включалась сигнализация и выключалась при повторном подношении. В интернете куча того, что включается и через паузу отключается, но мне нужно именно по карточке и включение и отключение. С инфракрасным датчиком работает все, с ДУ тоже с одной кнопки всё работает, а вот с RFID не в какую. При подношении он снимает снимает с охраны, а через 2 секунды снова ставит. Но карточку я второй раз не подношу. Целый день убил, ничего не понимаю. Подскажите, пожалуйста, только по существу, где я облажался, сил больше нет.

#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
#define STATE_LED 7
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате


int State=1;


void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.

 pinMode(STATE_LED, OUTPUT);


}
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 == 3309163877 && State==1){
  
   Serial.println("Security state: Off");
    tone(2, 700, 500); // Делаем звуковой сигнал, Открытие
    
    State = 0;
  delay(2000); // пауза 3 сек и механизм запирается.
  }
  
 if (uidDec == 3309163877 && State==0){
State=1;
   Serial.println("Security state: On");
    tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
    delay(2000); // пауза 2 сек и механизм запирается.
  }
  
}

#2 2017-10-07 23:03:45

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,220

Re: RFID не получается сделать включение и выключение.

if (uidDec == 3309163877 && State==1){
 
   Serial.println("Security state: Off");
    tone(2, 700, 500); // Делаем звуковой сигнал, Открытие
   
    State = 0;  !!!!!!!!!!!!!!
  delay(2000); // пауза 3 сек и механизм запирается.
  }
 
после 2 сек проверяем
uidDec == 3309163877  - да
State==0 да
условия выполняется

if (uidDec == 3309163877 && State==0){
State=1;
   Serial.println("Security state: On");
    tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
    delay(2000); // пауза 2 сек и механизм запирается.
  }
 

исправить так


if (uidDec == 3309163877 )

{
   uidDec = 0;

if ( State==1 ){
 
    Serial.println("Security state: Off");
    tone(2, 700, 500); // Делаем звуковой сигнал, Открытие

    State = 0;  !!!!!!!!!!!!!!
  delay(2000); // пауза 3 сек и механизм запирается.
  }
else
{
   State=1;
   Serial.println("Security state: On");
    tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
    delay(2000); // пауза 2 сек и механизм запирается.
  }
  }

не спите )

логита так се. эти паузы  нужны что б не словить повторное чтение карты?

#3 2017-10-08 00:12:18

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: RFID не получается сделать включение и выключение.

Из Вашего кода я почти ничего не понял, наверное не соображаю уже ничего сегодня. Но главное  все-таки дошло благодаря вашей подсказке, что после принятия uidDec значения, его стоит обнулить. Огромное спасибо!!! Паузы что бы не словить повторю Это пока только наброски из того что я начинал когда-то, а потом забросил, так что еще все буду доделывать.   Я из тех новичков, который учиться сразу на практике и еще слишком много не знаю.

#4 2017-10-08 05:30:26

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 406

Re: RFID не получается сделать включение и выключение.

ForestCrow пишет:

Целый день убил, ничего не понимаю. Подскажите, пожалуйста, только по существу, где я облажался, сил больше нет.

Вы потеряли опреатор else . Проследите логику работы вашего триггера и станет все ясно.  И не вводите в заблуждене ошибками в коментариях (где открыто а где закрыто?). А если более точно, то для переключения триггера нужно контролтровать не только факт соединения с карточкой но и смену состояния соединениния. Разобравшись в логике работы этого переключателя написать программу вам будет не сложно.

Редактировался Вячеслав Азаров (2017-10-09 15:32:03)

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела