Помогите с кодом
- Войдите на сайт для отправки комментариев
Вс, 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(); } }
Как Вы себе это видите? Как её искать, если я, например, не знаю, что этот код должен делать по задумке автора и что он делает на самом деле? Сначала я должен догадаться для чего он писался, потом протестировать, обнаружить неадекватность и объяснить её Вам? Не жирно? Может, сами расскажете, что за код, для чего и что с ним не так?
Ну Хотя бы отформировать строки было сложно ? Или здесь народ сидит, что бы править ваши "сопли"
Спасибо большое, я только учусь, еще рас спасибо!!!