RC522 перестал работать, в чем проблемма?
- Войдите на сайт для отправки комментариев
Вс, 15/10/2017 - 20:19
ВООБЩЕМ ПОЧЕМУТА КОД ПЕРЕСТАЛ РАБОТАТЬ, ВОПРОС ПОЧЕМУ?
#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++;
}
Когда прикладыаю карту строка №106 не выполняется.
проводок отпаялся.
if (!mfrc522.PICC_IsNewCardPresent()) // Наличие карты в зоне действия { return; } if (!mfrc522.PICC_ReadCardSerial()) // Выбираем одну из карт { return; }проводок отпаялся.
Вы знаете какой признак интересный, 1 раз карту прочитывает а дальше вылетает на методах
if (!mfrc522.PICC_IsNewCardPresent()) // Наличие карты в зоне действия { return; } if (!mfrc522.PICC_ReadCardSerial()) // Выбираем одну из карт { return; }проводок отпаялся.
Вы знаете какой признак интересный, 1 раз карту прочитывает а дальше вылетает на методах
if (!mfrc522.PICC_IsNewCardPresent()) // Наличие карты в зоне действия { СЮДА НАДО СТАВИТЬ PIC_HaltA, И Crypto.. return; } if (!mfrc522.PICC_ReadCardSerial()) // Выбираем одну из карт { и сюда тоже, Halta и Crypto return; }Разобрался, просто вот сюда между, т.к. если их не поставить как выше, и случайно в коде что то
забудите их при выходе там написать, все отваливается, а как туда загониш точно все гда работать будет.