RC522 перестал работать, в чем проблемма?

wu4k@mail.ru
Offline
Зарегистрирован: 09.09.2017
ВООБЩЕМ ПОЧЕМУТА КОД ПЕРЕСТАЛ РАБОТАТЬ, ВОПРОС ПОЧЕМУ? 

#include "PROGRAMM_CARD.h"
#include "PC.h"
#include "CONTROLER.h"
#include <SD.h>
#include <EEPROM.h>
#include <Ethernet.h>
#include <MFRC522.h>
#include <SmartDelay.h>
#include <CRC32.h>
#include "EXT.h"

EthernetClient client;
EthernetServer server(80);

bool wr = false;     // Флаг на получение даных
int temp = 0;      // это смещение в памяти при записи в EEPROM
bool fcard = false;    // Флаг на получение файла
bool fcardlogs = false;   // Флаг о том что надо получить адрес смещения от начала файла на чтение файла лога
unsigned long IDr = 0;   // Переменная которая хранит номер транзакции, если 0 то загрузить с банка
byte IDp;      // Каждые 255 переполнений происходит сохранение в EEPROM IDr

bool PROGRAMM_CARD = false;  // Если этот флаг истина то контрое в режиме программирования карты !!!!!
#define RST_PIN         0
#define SS_PIN          A1
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

SmartDelay TimeRAB(1000000 * 60 * 60);     // 60 мин (1 час)
SmartDelay ExitRegProgTime(1000000 * 60 * 5);   // 5 мин.

byte SelectDevice = 0;   // УКАЗЫВАЕТ НА НОМЕР УСТРОЙСТВА С КОТОРЫМ МЫ МОЖЕМ СЕЙЧАС РАБОТАТЬ.

        //extern bool RELAY_1ONN; 
        //extern bool RELAY_1; 
        //#define PinRelay1 A0  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        //extern SmartDelay Relay1; 
void setup()
{
 // 1. Параметры сетовой платы
 byte mac[] = { СКРЫТО };
 IPAddress ip(192, 168, 1, 10);
 Ethernet.begin(mac, ip);
 server.begin();

 // 3. Настрйка RFID
 SPI.begin();
 mfrc522.PCD_Init();

 // 4. Настройки SD;
 SD.begin(4);

 // 5. Настройка под реле 1,2,3,4 на выход все
 pinMode(5, OUTPUT); 
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);

 // 5.1. Настройка для управления платами
 pinMode(4, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(A0, OUTPUT);

 // 5.2. Запрещаем работу всех устрйств
 //digitalWrite(4, HIGH);
 //digitalWrite(10, HIGH);
 //analogWrite(A0, HIGH);

 analogWrite(A0, LOW);

 Serial.begin(9600);

 // 6. Загрузим номер транзакции
 IDr = EEPROM_ulong_read(734);
}

void loop()
{
 // Определяем правила работы, т.к. однворемено мы не можем работать со всеми устройствами.
 SelectDID();
}


void SelectDID()
{
 if (SelectDevice == 1)
 {
  Serial.println("v");
  //digitalWrite(4, HIGH);
  //digitalWrite(10, HIGH);
  //analogWrite(A0, LOW);
  //delay(100); 
  // СЕЙЧАС ВЫБИРАЕМ РАБОТУ СО СЧИТЫВАТЕЛЕМ, ЖДЕМ ОТ НЕГО ИНФОРМАЦИЮ И ОБРАБАТЫВАЕМ ЕЕ
  if (!mfrc522.PICC_IsNewCardPresent())  // Наличие карты в зоне действия
  {
   return;
  }


  if (!mfrc522.PICC_ReadCardSerial())   // Выбираем одну из карт
  {
   //PICC_Free;
   return;
  }
  Serial.println("v1");

  // ЕСЛИ МЫ НАХОДИМСЯ В РЕЖИМЕ ПРОГРАММИРОВАНИЯ ТО СЛЕДУЮЩАЯ ФУНКЦИЯ БУДЕТ ПОЛНОСТЬЮ ИСПОЛНЕНА
  // ЕСЛИ ЖЕ НЕТ ТО ОНА ЗАВЕРШИТСЯ БЫСТРО. 
  PROGRAMM_CARD_SET();

  // ДАЛЬШЕ МЫ МОЖЕМ НАХОДИТСЯ В РЕЖИМЕ ОЖИДАНИЯ КАРТЫ, Т.Е. КОГДА КТО ТО ПРИЛОЖИТ КАРТУ ТО МЫ 
  // ЕЕ ДОЛЖНЫ БУДЕМ ПРОЧИТАТЬ. ЭТОТ РЕЖИМ НАЗОВЕМ "КОНТРОЛЛЕР" КОГДА КОНТРОЛИРУЕМ ПРОЦЕСС ПРОХОДУ 
  // ЧЕРЕЗ СКУД СИСТЕМУ. 

  cardEx();

  return;
 }

 if (SelectDevice == 2)
 {
  // ТУТ РАБОТАЕМ УЖЕ С СЕТЕВОЙ ПЛАТОЙ, А ИМЕННО ЖДЕМ ПОДКЛЮЧЕНИЯ И ОТВЕЧАЕМ НА ЗАПРОСЫ.
  //digitalWrite(4, HIGH);
  //digitalWrite(10, LOW);
  //analogWrite(A0, HIGH);
  //PC();
  return;
 }

 // УЧИТЫВАЕМ ВРЕМЯ НАРАБОТКИ В ЧАСАХ
 //Time_();   

 // АВТОМАТИЧЕСКИ ВЫХОДИТ ИЗ РЕЖИМА ПРОГРАММИРОВАНИЯ ЧЕРЕЗ .5. МИНУТ
 //ExitRegProg(); 

 // ВЫБИРАЕМ НОВОЕ УСТРОЙСТВО
 VUSelect(); 


}

// ЭТОТ МЕТОД ЗАНИМАЕТСЯ ПЕРЕКЛЮЧЕНИЯМИ УСТРОЙСТВ КАЖДЫЕ ЦИКЛ ИСПОЛНЕНИЯ Т.Е. СНАЧАЛА ИМЕЕТСЯ 1 ЭТОТ КОД БЫЛ ИСПОЛНЕН
// ЗАТЕМ ДОЛЖЕН ИСПОЛНИТСЯ КОД 2, КАК ТОЛЬКО ОН ИСПОЛНИТСЯ СНОВА ИСПОЛНЯЕТСЯ КОД 1 И Т.Д.

void VUSelect()
{
 if (SelectDevice == 2)
 {
  SelectDevice = 0; 
 }
 SelectDevice++;
}




 

wu4k@mail.ru
Offline
Зарегистрирован: 09.09.2017

Когда прикладыаю карту строка №106 не выполняется.

Logik
Offline
Зарегистрирован: 05.08.2014

проводок отпаялся.

wu4k@mail.ru
Offline
Зарегистрирован: 09.09.2017
  if (!mfrc522.PICC_IsNewCardPresent())  // Наличие карты в зоне действия
  {
   return;
  }

  if (!mfrc522.PICC_ReadCardSerial())   // Выбираем одну из карт
  {
   return;
  }

Logik пишет:

проводок отпаялся.

 

Вы знаете какой признак интересный, 1 раз карту прочитывает а дальше вылетает на методах

 

Logik
Offline
Зарегистрирован: 05.08.2014

wu4k@mail.ru пишет:

  if (!mfrc522.PICC_IsNewCardPresent())  // Наличие карты в зоне действия
  {
   return;
  }

  if (!mfrc522.PICC_ReadCardSerial())   // Выбираем одну из карт
  {
   return;
  }

Logik пишет:

проводок отпаялся.

 

Вы знаете какой признак интересный, 1 раз карту прочитывает а дальше вылетает на методах

 

Не.Не знаю. Зато знаю что в коментах в либе написано что начинать работу с картой всегда надо с вызова PICC_IsNewCardPresent. Я пробовал без него - селект карты не работал.

wu4k@mail.ru
Offline
Зарегистрирован: 09.09.2017

if (!mfrc522.PICC_IsNewCardPresent())  // Наличие карты в зоне действия 
  { 
СЮДА НАДО СТАВИТЬ PIC_HaltA, И Crypto..
   return;  
  } 
  if (!mfrc522.PICC_ReadCardSerial())   // Выбираем одну из карт 
  { 
  и сюда тоже, Halta и Crypto 
   return;
  } 

Разобрался, просто вот сюда между, т.к. если их не поставить как выше, и случайно в коде что то

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