Помогите с кодом
- Войдите на сайт для отправки комментариев
Вс, 05/02/2017 - 23:52
Помогиите плиз найти ошибку в коде, за ранее благодарю!
#include <EEPROM.h> // Подключаем библиотеку для записи в энергонезависимую память "Card UID" / уникальный номер NFC карты.
#include <SPI.h>
#include <MFRC522.h> // скачанная библиотека "RFID" для RC522 Card Read Module.
#include <Password.h>
#include <Keypad.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Объект MFRC522C / reate MFRC522 instance.
unsigned long uidDec, uidDecTemp; // Для отображения номера карточки в десятичном формате.
unsigned long CardUIDeEPROMread[] = {
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};
int ARRAYindexUIDcard; // Индекс для массива CardUIDeEPROMread.
int EEPROMstartAddr; // Стартовая ячейка памяти для записи / чтения EEPROM "Card UID".
int LockSwitch = 6; // Замок / Переключатель / Блокиратор.
int OpenDoor = 5; // открыть дверь
int PiezoPin = 7; // Piezo / Динамик.
Password password = Password( "1234" );
const byte ROWS = 4; // Four rows
const byte COLS = 3; // columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = { 2,A0,7,6 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 5,4,3, };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
//1 часть, RFID ЗАМОК
{
Serial.begin(9600);
//keypad.addEventListener(keypadEvent);
//Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
pinMode(PiezoPin, OUTPUT);
digitalWrite(PiezoPin, HIGH),delay(100),digitalWrite(PiezoPin, LOW); // Подадим писк при запуске.
EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM.
for(int i = 0; i <= 49; i++)Serial.print(i),Serial.print(" ---- "),Serial.println(CardUIDeEPROMread[i]);
//for (int i = 0; i < 512; i++)EEPROM.write(i, 0); // EEPROM Clear / Очистить / стереть EEPROM.
}
void loop()
{
{
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
// Внимание!, замените "Card UID" администратора № 3556194005, на свой "Card UID".
if (uidDec == 3556194005 || LockSwitch > 0)EEPROMwriteUIDcard(); // Запускаем функцию записи в EEPROM "Card UID" пользователей.
delay(2000);
if (LockSwitch == 0) // только если находимся в "режиме управления".
{
for(ARRAYindexUIDcard = 0; ARRAYindexUIDcard <= 49; ARRAYindexUIDcard++)
{
if (CardUIDeEPROMread[ARRAYindexUIDcard] > 0) // Перебираем весь массив CardUIDeEPROMread, фильтруем от 0.
{
if (CardUIDeEPROMread[ARRAYindexUIDcard] == uidDec) // Если обнаружено совпадение с поднесенной картой.
{
CommandsCARD(); // Запускаем функцию для выполнения любых действий, в зависимости от "Card UID" поднесённой карты.
break; // Выходим, останавливаем проверку / перебор / поиск, в массиве CardUIDeEPROMread.
}
}
}
if (ARRAYindexUIDcard == 50)Serial.println("NOT Found CARD-UID"),Serial.println(uidDec);
delay(2000);
ARRAYindexUIDcard = 0;
}
}
void EEPROMwriteUIDcard() {
if (LockSwitch == 0) // Если находились в режиме управления.
{
Serial.println(" START RECORD Card UID CLIENT");
for(int i = 0; i <= 2; i++)delay(500),digitalWrite(PiezoPin, HIGH),delay(500),digitalWrite(PiezoPin, LOW); // 3 раза пискнем.
}
if (LockSwitch > 0) // Если находимся в "режиме записи".
{
// Внимание!, замените "Card UID" администратора № 3556194005, на свой "Card UID".
if (uidDec == 3556194005) // Если поднесена карта администратора.
{
Serial.println(" SKIP RECORD ");
Serial.println(EEPROMstartAddr/5); // Выводим № пропущенной ячейки памяти.
EEPROMstartAddr += 5; // Пропускаем запись в ячейку памяти, если не хотим записывать туда "Card UID".
digitalWrite(PiezoPin, HIGH),delay(200),digitalWrite(PiezoPin, LOW); // 1 раз пискнем.
}
else // Иначе, то есть поднесена карта для записи.
{
EEPROM.write(EEPROMstartAddr, uidDec & 0xFF);
EEPROM.write(EEPROMstartAddr + 1, (uidDec & 0xFF00) >> 8);
EEPROM.write(EEPROMstartAddr + 2, (uidDec & 0xFF0000) >> 16);
EEPROM.write(EEPROMstartAddr + 3, (uidDec & 0xFF000000) >> 24);
// Записали!.
delay(10);
//2 часть, КОДОВЫЙ ЗАМОК
Serial.println("RECORD OK! IN MEMORY ");
Serial.println(EEPROMstartAddr/5); // Выводим № записанной ячейки памяти.
EEPROMstartAddr += 5; // Прибавляем 5 к стартовой ячейки записи.
for(int i = 0; i <= 40; i++)delay(5),digitalWrite(PiezoPin, HIGH),delay(5),digitalWrite(PiezoPin, LOW); // пискнем.
}
}
LockSwitch++; // Разблокируем режим записи, и заблокируем режим управления.
if (EEPROMstartAddr/5 == 50) // если дошли до 50.
{
delay(2000);
Serial.println("RECORD FINISH");
digitalWrite(PiezoPin, HIGH),delay(3000),digitalWrite(PiezoPin, LOW); // Длинный писк.
EEPROMstartAddr = 0;
uidDec = 0;
ARRAYindexUIDcard = 0;
EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM.
}
}
void EEPROMreadUIDcard()
{
for(int i = 0; i <= 49; i++)
{
byte val = EEPROM.read(EEPROMstartAddr+3);
CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val;
val = EEPROM.read(EEPROMstartAddr+2);
CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val;
val = EEPROM.read(EEPROMstartAddr+1); // увеличиваем EEPROMstartAddr на 1.
CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val;
val = EEPROM.read(EEPROMstartAddr);
CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val;
ARRAYindexUIDcard++; // увеличиваем на 1.
EEPROMstartAddr +=5; // увеличиваем на 5.
}
ARRAYindexUIDcard = 0;
EEPROMstartAddr = 0;
uidDec = 0;
LockSwitch = 0;
DisplayWAiT_CARD();
}
void DisplayWAiT_CARD()
{
Serial.println("WAIT");
Serial.println("CARD");
}
void CommandsCARD()
{
Serial.println("Hi "); // Выводим на дисплей "привет".
if (ARRAYindexUIDcard == 0)
{
Serial.println("Dmitry"); // Выводим на дисплей "Dmitry".
digitalWrite(OpenDoor, HIGH),delay(1500),digitalWrite(OpenDoor, LOW);
}
else if (ARRAYindexUIDcard == 1) // Если Card-UID получен из ячейки № 1 / индекс массива № 1.
{
Serial.println("Sergey");
}
else if (ARRAYindexUIDcard == 2) // Если Card-UID получен из ячейки № 2 / индекс массива № 2.
{
Serial.println("Peter");
}
else if (ARRAYindexUIDcard == 3)
{
Serial.println("Vasily");
}
else if (ARRAYindexUIDcard == 49)
{
Serial.println("OSIPOV");
}
Serial.println(CardUIDeEPROMread[ARRAYindexUIDcard]); // Выводим на дисплей обнаруженный Card-UID.
Serial.println(ARRAYindexUIDcard); // Выводим на дисплей № индекса массива / ячейки, где хранился обнаруженный Card-UID
for(int i = 0; i <= ARRAYindexUIDcard; i++)delay(20),digitalWrite(PiezoPin, HIGH),delay(20),digitalWrite(PiezoPin, LOW);
delay(1); // Дёргаем микроконтроллер.
}
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
case '*': checkPassword(); break;
case '#': password.reset(); break;
default: password.append(eKey);
}
}
}
void checkPassword(){
if (password.evaluate()){
Serial.println("OPEN");
digitalWrite(OpenDoor, HIGH); //Add code to run if it works
}else{
Serial.println("CLOASED");
}
password.reset();
}
}
Как Вы себе это видите? Как её искать, если я, например, не знаю, что этот код должен делать по задумке автора и что он делает на самом деле? Сначала я должен догадаться для чего он писался, потом протестировать, обнаружить неадекватность и объяснить её Вам? Не жирно? Может, сами расскажете, что за код, для чего и что с ним не так?
Ну Хотя бы отформировать строки было сложно ? Или здесь народ сидит, что бы править ваши "сопли"
#include <EEPROM.h> // Подключаем библиотеку для записи в энергонезависимую память "Card UID" / уникальный номер NFC карты. #include <SPI.h> #include <MFRC522.h> // скачанная библиотека "RFID" для RC522 Card Read Module. #include <Password.h> #include <Keypad.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Объект MFRC522C / reate MFRC522 instance. unsigned long uidDec, uidDecTemp; // Для отображения номера карточки в десятичном формате. unsigned long CardUIDeEPROMread[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }; int ARRAYindexUIDcard; // Индекс для массива CardUIDeEPROMread. int EEPROMstartAddr; // Стартовая ячейка памяти для записи / чтения EEPROM "Card UID". int LockSwitch = 6; // Замок / Переключатель / Блокиратор. int OpenDoor = 5; // открыть дверь int PiezoPin = 7; // Piezo / Динамик. Password password = Password( "1234" ); const byte ROWS = 4; // Four rows const byte COLS = 3; // columns char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte rowPins[ROWS] = { 2, A0, 7, 6 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte colPins[COLS] = { 5, 4, 3, }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { //1 часть, RFID ЗАМОК Serial.begin(9600); //keypad.addEventListener(keypadEvent); //Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. pinMode(PiezoPin, OUTPUT); digitalWrite(PiezoPin, HIGH), delay(100), digitalWrite(PiezoPin, LOW); // Подадим писк при запуске. EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM. for (int i = 0; i <= 49; i++)Serial.print(i), Serial.print(" ---- "), Serial.println(CardUIDeEPROMread[i]); //for (int i = 0; i < 512; i++)EEPROM.write(i, 0); // EEPROM Clear / Очистить / стереть EEPROM. } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) return; if ( ! mfrc522.PICC_ReadCardSerial()) return; for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } // Внимание!, замените "Card UID" администратора № 3556194005, на свой "Card UID". if (uidDec == 3556194005 || LockSwitch > 0) EEPROMwriteUIDcard(); // Запускаем функцию записи в EEPROM "Card UID" пользователей. delay(2000); if (LockSwitch == 0) {// только если находимся в "режиме управления". for (ARRAYindexUIDcard = 0; ARRAYindexUIDcard <= 49; ARRAYindexUIDcard++) { if (CardUIDeEPROMread[ARRAYindexUIDcard] > 0) { // Перебираем весь массив CardUIDeEPROMread, фильтруем от 0. if (CardUIDeEPROMread[ARRAYindexUIDcard] == uidDec) { // Если обнаружено совпадение с поднесенной картой. CommandsCARD(); // Запускаем функцию для выполнения любых действий, в зависимости от "Card UID" поднесённой карты. break; // Выходим, останавливаем проверку / перебор / поиск, в массиве CardUIDeEPROMread. } } } if (ARRAYindexUIDcard == 50)Serial.println("NOT Found CARD-UID"), Serial.println(uidDec); delay(2000); ARRAYindexUIDcard = 0; } } void EEPROMwriteUIDcard() { if (LockSwitch == 0) { // Если находились в режиме управления. Serial.println(" START RECORD Card UID CLIENT"); for (int i = 0; i <= 2; i++)delay(500), digitalWrite(PiezoPin, HIGH), delay(500), digitalWrite(PiezoPin, LOW); // 3 раза пискнем. } if (LockSwitch > 0) {// Если находимся в "режиме записи". // Внимание!, замените "Card UID" администратора № 3556194005, на свой "Card UID". if (uidDec == 3556194005) { // Если поднесена карта администратора. Serial.println(" SKIP RECORD "); Serial.println(EEPROMstartAddr / 5); // Выводим № пропущенной ячейки памяти. EEPROMstartAddr += 5; // Пропускаем запись в ячейку памяти, если не хотим записывать туда "Card UID". digitalWrite(PiezoPin, HIGH), delay(200), digitalWrite(PiezoPin, LOW); // 1 раз пискнем. } else {// Иначе, то есть поднесена карта для записи. EEPROM.write(EEPROMstartAddr, uidDec & 0xFF); EEPROM.write(EEPROMstartAddr + 1, (uidDec & 0xFF00) >> 8); EEPROM.write(EEPROMstartAddr + 2, (uidDec & 0xFF0000) >> 16); EEPROM.write(EEPROMstartAddr + 3, (uidDec & 0xFF000000) >> 24); // Записали!. delay(10); //2 часть, КОДОВЫЙ ЗАМОК Serial.println("RECORD OK! IN MEMORY "); Serial.println(EEPROMstartAddr / 5); // Выводим № записанной ячейки памяти. EEPROMstartAddr += 5; // Прибавляем 5 к стартовой ячейки записи. for (int i = 0; i <= 40; i++)delay(5), digitalWrite(PiezoPin, HIGH), delay(5), digitalWrite(PiezoPin, LOW); // пискнем. } } LockSwitch++; // Разблокируем режим записи, и заблокируем режим управления. if (EEPROMstartAddr / 5 == 50) { // если дошли до 50. delay(2000); Serial.println("RECORD FINISH"); digitalWrite(PiezoPin, HIGH), delay(3000), digitalWrite(PiezoPin, LOW); // Длинный писк. EEPROMstartAddr = 0; uidDec = 0; ARRAYindexUIDcard = 0; EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM. } } void EEPROMreadUIDcard() { for (int i = 0; i <= 49; i++) { byte val = EEPROM.read(EEPROMstartAddr + 3); CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; val = EEPROM.read(EEPROMstartAddr + 2); CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; val = EEPROM.read(EEPROMstartAddr + 1); // увеличиваем EEPROMstartAddr на 1. CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; val = EEPROM.read(EEPROMstartAddr); CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; ARRAYindexUIDcard++; // увеличиваем на 1. EEPROMstartAddr += 5; // увеличиваем на 5. } ARRAYindexUIDcard = 0; EEPROMstartAddr = 0; uidDec = 0; LockSwitch = 0; DisplayWAiT_CARD(); } void DisplayWAiT_CARD() { Serial.println("WAIT"); Serial.println("CARD"); } void CommandsCARD() { Serial.println("Hi "); // Выводим на дисплей "привет". if (ARRAYindexUIDcard == 0) { Serial.println("Dmitry"); // Выводим на дисплей "Dmitry". digitalWrite(OpenDoor, HIGH), delay(1500), digitalWrite(OpenDoor, LOW); } else if (ARRAYindexUIDcard == 1) { // Если Card-UID получен из ячейки № 1 / индекс массива № 1. Serial.println("Sergey"); } else if (ARRAYindexUIDcard == 2) { // Если Card-UID получен из ячейки № 2 / индекс массива № 2. Serial.println("Peter"); } else if (ARRAYindexUIDcard == 3) { Serial.println("Vasily"); } else if (ARRAYindexUIDcard == 49) { Serial.println("OSIPOV"); } Serial.println(CardUIDeEPROMread[ARRAYindexUIDcard]); // Выводим на дисплей обнаруженный Card-UID. Serial.println(ARRAYindexUIDcard); // Выводим на дисплей № индекса массива / ячейки, где хранился обнаруженный Card-UID for (int i = 0; i <= ARRAYindexUIDcard; i++)delay(20), digitalWrite(PiezoPin, HIGH), delay(20), digitalWrite(PiezoPin, LOW); delay(1); // Дёргаем микроконтроллер. keypad.getKey(); } void keypadEvent(KeypadEvent eKey) { switch (keypad.getState()) { case PRESSED: Serial.print("Pressed: "); Serial.println(eKey); switch (eKey) { case '*': checkPassword(); break; case '#': password.reset(); break; default: password.append(eKey); } } } void checkPassword() { if (password.evaluate()) { Serial.println("OPEN"); digitalWrite(OpenDoor, HIGH); //Add code to run if it works } else { Serial.println("CLOASED"); } password.reset(); }Спасибо большое, я только учусь, еще рас спасибо!!!