Официальный сайт компании Arduino по адресу arduino.cc
RFID контроль сотрудников
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 05/05/2015 - 09:27
выкладываю свою наработку RFID контроль сотрудников
#include <SPI.h> #include <MFRC522.h> #include <EEPROM.h> #include <SD.h> #include <DS1302.h> #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,20,4); // Init the DS1302 DS1302 rtc(2, 3, 5); #define RST_PIN 9 // #define SS_PIN 10 // File myFile; // Файл Алексей char Str1[10]; MFRC522 mfrc522(SS_PIN, RST_PIN); // Создали MFRC522 instance unsigned long uidDec, uidDecTemp; // переменные для получения UID boolean aleks= EEPROM.read(0); //EEPROM читаем значения true или false Aleks int addr_aleks = 0; //Aleks использует ячеку 0 boolean aleksandr= EEPROM.read(1); int addr_aleksandr = 1; boolean anton= EEPROM.read(2); int addr_anton = 2; boolean vova= EEPROM.read(3); int addr_vova = 3; boolean nasti= EEPROM.read(4); int addr_nasti = 4; void setup() { pinMode(2, OUTPUT); Serial.begin(9600); // Initialize serial communications with the PC while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 // Инициализируем СД карту cheksd(); rtc.halt(false); rtc.writeProtect(false); lcd.begin(); lcd.backlight(); status(); } void loop() { lcd.setCursor(0, 0); lcd.print(rtc.getTimeStr()); SD_check(); // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // полученя UID for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp=mfrc522.uid.uidByte[i]; uidDec=uidDec*256+uidDecTemp; } // полученя UID Serial.println(uidDec); // lcd.setCursor(2, 2); // lcd.print(uidDec); // Оброботка Алесея if (uidDec == 4200285874) { if (aleks == true) { //String s = rtc.getTimeStr(); //s.toCharArray(Str1, s.length()); printtrue ("aleks.txtt"); } if (aleks == false) { printfalse ("aleks.txtt"); } myFile.close(); aleks = ! aleks; EEPROM.write(addr_aleks, aleks); } // Оброботка Алесея // Оброботка Александор if (uidDec == 2123090467) { if (aleksandr == true) { printtrue ("alex.txtt"); } if (aleksandr == false) { printfalse ("alex.txtt"); } myFile.close(); aleksandr = ! aleksandr; EEPROM.write(addr_aleksandr, aleksandr); } // Оброботка Александор // Оброботка Антон if (uidDec == 691247130) { if (anton == true) { printtrue ("anton.txtt"); } if (anton == false) { printfalse ("anton.txtt"); } myFile.close(); anton = ! anton; EEPROM.write(addr_anton, anton); } // Оброботка Антон // Оброботка Настя if (uidDec == 3104822041) { if (nasti == true) { printtrue ("nasti.txtt"); } if (nasti == false) { printfalse ("nasti.txtt"); } myFile.close(); nasti = ! nasti; EEPROM.write(addr_nasti, nasti); } // Оброботка Настя // Оброботка Вова if (uidDec == 3645938714) { if (vova == true) { printtrue ("vova.txtt"); } if (vova == false) { printfalse ("vova.txtt"); } myFile.close(); vova = ! vova; EEPROM.write(addr_vova, vova); } // Оброботка Вово status(); delay(1000); lcd.setCursor(0, 4); lcd.print(" "); } void printfalse (String tex) { String s = tex; s.toCharArray(Str1, s.length()); myFile.close(); myFile = SD.open(Str1, FILE_WRITE); if (myFile) { myFile.print(rtc.getDateStr()); myFile.print(" ; "); myFile.println(rtc.getTimeStr()); myFile.close(); lcd.setCursor(2, 1); lcd.print("OK"); tone(7,700,500); } } void printtrue (String tex ) { String s = tex; s.toCharArray(Str1, s.length()); myFile.close(); myFile = SD.open(Str1, FILE_WRITE); if (myFile) { myFile.print(tex+" ; "); myFile.print(rtc.getDateStr()); myFile.print(" ; "); myFile.print(rtc.getTimeStr()); myFile.print(" ; "); myFile.close(); lcd.setCursor(2, 1); lcd.print("OK "); tone(7,500,500); } } void SD_check() { static uint32_t pre_millis = 0; if(millis()-pre_millis < 500) return; // 2 раза в секунду проверяем pre_millis = millis(); myFile = SD.open("log.txt", FILE_READ); if(myFile.read() == -1) // Если файл не читается // if(base.available()) // или нечего читать { lcd.setCursor(0, 2); lcd.print("ERROR"); delay(50); asm volatile ("jmp 0x0000"); // перезагружаемся } myFile.close(); } void cheksd() { if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); } void status() { if (aleks == false) { lcd.setCursor(0, 8); lcd.print("+"); } if (aleks == true) { lcd.setCursor(0, 8); lcd.print("-"); } if (aleksandr == false) { lcd.setCursor(2, 8); lcd.print("+"); } if (aleksandr == true) { lcd.setCursor(2, 8); lcd.print("-"); } if (anton == false) { lcd.setCursor(4, 8); lcd.print("+"); } if (anton == true) { lcd.setCursor(4, 8); lcd.print("-"); } if (vova == false) { lcd.setCursor(6, 8); lcd.print("+"); } if (vova == true) { lcd.setCursor(6, 8); lcd.print("-"); } if (nasti == false) { lcd.setCursor(8, 8); lcd.print("+"); } if (nasti == true) { lcd.setCursor(8, 8); lcd.print("-"); } }
Не, ну прямо в скетч прописывать карточки это как-то сосем по колхозному. Надо в EEPROM их записывать. Ну и механизм создания новых нужен.
SD карта же используется, почему не хранить ключи там? Хотя это довольно медленно. Лучше хранить в EEPROM
SD карта же используется, почему не хранить ключи там? Хотя это довольно медленно. Лучше хранить в EEPROM
Не на столько медленно, чтобы об этом задумываться. Но в подобных системах лучше хранить ключи именно в EEPROM - В таком случае с отсутствием карточки не будет только логов, но если на карте будут ключи - система вообще не будет работать
Хранение ключей в EEPROM реализуется несложно - вон у Осипова есть вообще готовый скетч.
это только набросок... сама суть. буду ее улудшать...
а писать логи всетаки лучше на флешку или EEPROM ?
По сути я бы с езернетом или вифи делал и возможностью удаленного доступа для внесения карточек, считывания логов, установки часов и т.д.
А для логов (и базы карточек) можно ещё в FRAM память использовать, хотя в данной задаче и флеш не сильно плохо, а то EEPROMа не так чтобы много в контроллере да и количество циклов записи у нее ограничено.
езернетом или вифи я тоже хотел. и mysql подключить. но так как если пропожет свях то все сразу накроеться.
поэтому решил что апарат должен быть автономный
Конечно автономный. По сети только чтение логов и настройка.
жду когда приедут wifi модуль... . а щас займус EEPROM
это только набросок... сама суть. буду ее улудшать...
а писать логи всетаки лучше на флешку или EEPROM ?
Логи в еепром не пишут - мало места. А когда еепром умрет от постоянного использования - не заменишь.
А чем плох EEPROM в виде отдельной мелкосхемы? Там вроде и ресурс на пару порядков выше?
подскажите хочу на php сделать сервер мини с графиком не как не могу нарыть инфу про такой график как он делаеться
ну я гугл чартом нечто подобное рисовал
ну я гугл чартом нечто подобное рисовал
можешь помочь сделать.
таблица
можешь помочь сделать.
Могу завтра поискать от своих проектов пример получающий данные из майскуля и строящий график. Там суть в том, что на пхп формируешь html файлик строящий график с помощью гугл чарта. Простенько, но я не силен в веб программировании.
Типа так:
з.ы. движок форума портит код делая ссылку (строка 38), правильное формирование шапочки хтымыеля смотри в примерах гугл чарта по ссылке выше.
Ну что? Получилось?
почти.... скоро выложу код
подправил код немного оптимизировал пока без web интерфейса
подправил код немного оптимизировал пока без web интерфейса
День добрый! Подскажите а получится к UNO подключить считыватель PROXY–3M?
Да.
Да.
Не подскажите где почитать как?