RFID RC522

qsh

✩✩✩✩✩✩✩
16 Авг 2018
6
0
Помогите понять, почему в коде, команда else не работает. При поднесении метки к считывателю digitalWrite(relay, 1); исполняется, а digitalWrite(relay, 0); нет.
C++:
 if (uidDec == 822179977) // Сравниваем Uid метки, если он равен заданому то реле открывает.

  {
    digitalWrite(relay, 1);
  
  }

  else {

  digitalWrite(relay, 0);

  }
C++:
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
#define relay 14

MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  pinMode(relay,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 == 822179977) // Сравниваем Uid метки, если он равен заданому то реле открывает.
  {
    digitalWrite(relay, 1);
    
  }
  else {
  digitalWrite(relay, 0);
  }
}
 

qsh

✩✩✩✩✩✩✩
16 Авг 2018
6
0
Подношу метку, relay, 1. Убираю relay, 0. Так вот, при убирании метки relay остаётся в позиции Hi(1) , до перезагрузки.
 

qsh

✩✩✩✩✩✩✩
16 Авг 2018
6
0
Сейчас понял. А как мне надо, не могу сообразить, как написать. Не подскажешь?
 

qsh

✩✩✩✩✩✩✩
16 Авг 2018
6
0
@Wan-Derer, Спасибо большое. Меня по сути устраивал и первый вариант, для развития переписал.
C++:
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    digitalWrite(relay, 0);
    
  }
  if (uidDec == 822179977)
  {
    digitalWrite(relay, 1);
    return;
      }