Дребезг RFID модуля

Тема в разделе "Arduino & Shields", создана пользователем Suro, 8 июл 2017.

  1. Suro

    Suro Нерд

    никак не получается убрать дребезг MFRC522 модуля ,, вот код у меня ,, открываю монитор порта ,,

    при приложенной метке должен выводить

    Card №: 515280555
    Card №: 515280555
    Card №: 515280555

    когда нет

    No card
    No card
    No card

    но у меня устойчиво не выводит номер карты,сообщения "NO card" проскаивают при приложенной метке

    Card №: 515280555
    No card
    Card №: 515280555
    No card
    Card №: 515280555
    No card
    Card №: 515280555
    No card
    ...

    Код (C++):
    void loop() {
     
      Key = 0;
      if ( ! rfid.PICC_IsNewCardPresent()) {Serial.println("No card"); }// Поиск нового ключа
      delay(50);
      if ( rfid.PICC_ReadCardSerial()) {
     
        for (byte i = 0; i < rfid.uid.size; i++){// Выдача серийного № ключа
        KeyTemp = rfid.uid.uidByte[i];
        Key = Key * 256 + KeyTemp;}

        Serial.print("Card №: ");
        Serial.println(Key); // Выводим № ключа в консоль

    }
    }
     
  2. rkit

    rkit Гуру

    А зачем вы использете метод для поиска только НОВОЙ карты, если вам нужно удержание? Читайте документацию к библиотеке, там все есть.
     
  3. qwone

    qwone Гик

    Код (C++):
    void loop() {
      static uint32_t past = 0;
      delay(50);
      if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        past = millis();
        Key = 0;
        for (byte i = 0; i < rfid.uid.size; i++) { // Выдача серийного № ключа
          KeyTemp = rfid.uid.uidByte[i];
          Key = Key * 256 + KeyTemp;
        }
        Serial.println();
        Serial.print("Card №: ");
        Serial.print(Key); // Выводим № ключа в консоль
      }
      if (millis() - past >= 1000) {
        Serial.println();
        Serial.print("No card");  // Поиск нового ключа
      }
    }
     
  4. Suro

    Suro Нерд

    Честно говоря читал но не нашел ,, надо когда нет карты выводит "No card" ,, когда есть только номер метки
     
  5. Suro

    Suro Нерд

    очень спосибо брат ,, работает но есть маленький нюанс ,, когда в первый раз не приложил карту функцию in(); четко вызывает ,, а когда приближаю один из карт вызиваю другую функцию после этого когда нет никокой карты функцию in(); не вызывает ,, в чем может быть проблема??

    Код (C++):
    void loop() {
      static uint32_t past = 0;
      if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        past = millis();
        Key = 0;
        for (byte i = 0; i < rfid.uid.size; i++) { // Выдача серийного № ключа
          KeyTemp = rfid.uid.uidByte[i];
          Key = Key * 256 + KeyTemp;
        }
        Serial.println();
        Serial.print("Card №: ");
        Serial.print(Key); // Выводим № ключа в консоль
          if (Key == 515280555) tas();
          if (Key == 1459297918) qsan();
          }
      if (millis() - past >= 50) {
        Serial.println();
        Serial.print("0");  // Поиск нового ключа
        if (Key == 0) in();
      }
    }
     
  6. qwone

    qwone Гик

    Разумеется, вы просто очень не внимательны.Ленитесь думать и правильно расставлять скобки.
    Код (C++):
    void loop() {
      static uint32_t past = 0;
      if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        past = millis();
        Key = 0;
        for (byte i = 0; i < rfid.uid.size; i++) { // Выдача серийного № ключа
          KeyTemp = rfid.uid.uidByte[i];
          Key = Key * 256 + KeyTemp;
        }
        Serial.println();
        Serial.print("Card №: ");
        Serial.print(Key); // Выводим № ключа в консоль
        if (Key == 515280555) tas();
        if (Key == 1459297918) qsan();
      }
      if (millis() - past >= 50) {
        Serial.println();
        Serial.print("0");  // Поиск нового ключа
        in();
      }
    }