View difference between Paste ID: sthMhHJ7 and E4vPkp0d
SHOW: | | - or go back to the newest paste.
1
#include <SPI.h> //
2
#include <SD.h> //
3
#include <Wire.h> //
4
#include "RTClib.h" //
5
#include <MFRC522.h> //
6
#include <LiquidCrystal_I2C.h>
7
8
LiquidCrystal_I2C lcd(0x27,16,2);
9
#define SS_PIN 8 // 10 for shield // 8 for normal small module
10
#define RST_PIN 9 // FOR RFID READER
11
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
12
13
14
//-------------------------------------------------------------------------USER # 1
15
String user001ID = "09 2A 13 A3";
16
boolean user001Status = true;
17
//-------------------------------------------------------------------------
18
19
//-------------------------------------------------------------------------USER # 2
20
String user002ID = "D4 A0 30 2A";
21
boolean user002Status = true;
22
//-------------------------------------------------------------------------
23
24
25
// A simple data logger for the Arduino analog pins
26
27
// how many milliseconds between grabbing data and logging it. 1000 ms is once a second
28
#define LOG_INTERVAL  1000 // mills between entries (reduce to take more/faster data)
29
30
// how many milliseconds before writing the logged data permanently to disk
31
// set it to the LOG_INTERVAL to write each time (safest)
32
// set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to
33
// the last 10 reads if power is lost but it uses less power and is much faster!
34
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
35
uint32_t syncTime = 0; // time of last sync()
36
int buttonReading = 1;
37
#define ECHO_TO_SERIAL   1 // echo data to serial port
38
#define WAIT_TO_START    0 // Wait for serial input in setup()
39
40
41
RTC_DS1307 RTC; // define the Real Time Clock object
42
43
// for the data logging shield, we use digital pin 10 for the SD cs line
44
const int chipSelect = 10;
45
46
// the logging file
47
File logfile;
48
49
void error(char *str)
50
{
51
  Serial.print("error: ");
52
  Serial.println(str);
53
54
  while (1);
55
}
56
57
void setup(void)
58
{
59
  lcd.init();
60
  lcd.init();
61
  lcd.backlight();
62
  lcd.print("Connecting...");
63
  Serial.begin(9600);
64
  Serial.println();
65
  SPI.begin();      // Initiate  SPI bus
66
  mfrc522.PCD_Init();   // Initiate MFRC522
67
  pinMode(7, OUTPUT);
68
#if WAIT_TO_START
69
  Serial.println("Type any character to start");
70
  while (!Serial.available());
71
#endif //WAIT_TO_START
72
73
  // initialize the SD card
74
  Serial.print("Initializing SD card...");
75
  // make sure that the default chip select pin is set to
76
  // output, even if you don't use it:
77
  pinMode(10, OUTPUT);
78
  //  pinMode(buttonPin, INPUT);
79
  // see if the card is present and can be initialized:
80
  if (!SD.begin(chipSelect)) {
81
    error("Card failed, or not present");
82
  }
83
  Serial.println("card initialized.");
84
85
  // create a new file
86
  char filename[] = "LOGGER00.CSV";
87
  for (uint8_t i = 0; i < 100; i++) {
88
    filename[6] = i / 10 + '0';
89
    filename[7] = i % 10 + '0';
90
    if (! SD.exists(filename)) {
91
      // only open a new file if it doesn't exist
92
      logfile = SD.open(filename, FILE_WRITE);
93
      break;  // leave the loop!
94
    }
95
  }
96
97
  if (! logfile) {
98
    error("couldnt create file");
99
  }
100
101
  Serial.print("Logging to: ");
102
  Serial.println(filename);
103
104
  // connect to RTC
105
  Wire.begin();
106
  if (!RTC.begin()) {
107
    logfile.println("RTC failed");
108
#if ECHO_TO_SERIAL
109
    Serial.println("RTC failed");
110
#endif  //ECHO_TO_SERIAL
111
  }
112
113
114
  logfile.println("Date,Time,Log");
115
#if ECHO_TO_SERIAL
116
  Serial.println("Date-Time,Status");
117
#endif //ECHO_TO_SERIAL
118
119
  delay(2000);
120
  lcd.clear();
121
  lcd.print("System Ready");
122
  delay(2500);
123
  lcd.clear();
124
  lcd.setCursor(0, 0);
125
  lcd.print("Log:");
126
}
127
128
void loop()
129
{
130
  // Look for new cards
131
  if ( ! mfrc522.PICC_IsNewCardPresent())
132
  {
133
    return;
134
  }
135
  // Select one of the cards
136
  if ( ! mfrc522.PICC_ReadCardSerial())
137
  {
138
    return;
139
  }
140
  //Show UID on serial monitor
141
  String content = "";
142
  byte letter;
143
  buzz();
144
  for (byte i = 0; i < mfrc522.uid.size; i++)
145
  {
146
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
147
    Serial.print(mfrc522.uid.uidByte[i], HEX);
148
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
149
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
150
  }
151
  Serial.println();
152
  content.toUpperCase();
153
154
  ///////////////////////////////////////////////////////////////////////// User #001 /start
155
  if (content.substring(1) == user001ID)
156
  {
157
    if (user001Status == true) {
158
      user001Status = false;
159
      //Serial.println("Shahad Just Signed IN");
160
      DateTime now;
161
      // fetch the time
162
      now = RTC.now();
163
      // log time
164
      logfile.print('"');
165
      logfile.print(now.year(), DEC);
166
      logfile.print("/");
167
      logfile.print(now.month(), DEC);
168
      logfile.print("/");
169
      logfile.print(now.day(), DEC);
170
      logfile.print('"');
171
      logfile.print(",");
172
      logfile.print(now.hour(), DEC);
173
      logfile.print(":");
174
      logfile.print(now.minute(), DEC);
175
      logfile.print(":");
176
      logfile.print(now.second(), DEC);
177
#if ECHO_TO_SERIAL
178
      Serial.print('"');
179
      Serial.print(now.year(), DEC);
180
      Serial.print("/");
181
      Serial.print(now.month(), DEC);
182
      Serial.print("/");
183
      Serial.print(now.day(), DEC);
184
      Serial.print(" ");
185
      Serial.print(now.hour(), DEC);
186
      Serial.print(":");
187
      Serial.print(now.minute(), DEC);
188
      Serial.print(":");
189
      Serial.print(now.second(), DEC);
190
      Serial.print('"');
191
#endif //ECHO_TO_SERIAL
192
193
      delay(10);
194
195
      logfile.print(", ");
196
      logfile.print("Shahad Just Signed IN");
197
#if ECHO_TO_SERIAL
198
      Serial.print(", ");
199
      Serial.print("Shahad Just Signed IN");
200
      lcd.setCursor(0, 1);
201
      lcd.print("Shahad-Sign IN");
202
      delay(3000);
203
      lcd.setCursor(0, 1);
204
      lcd.print("                ");
205
#endif //ECHO_TO_SERIAL
206
      logfile.println();
207
#if ECHO_TO_SERIAL
208
      Serial.println();
209
#endif // ECHO_TO_SERIAL
210
      // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
211
      // which uses a bunch of power and takes time
212
      if ((millis() - syncTime) < SYNC_INTERVAL) return;
213
      syncTime = millis();
214
      // blink LED to show we are syncing data to the card & updating FAT!
215
      logfile.flush();
216
      delay(1000);
217
    }
218
    else if (user001Status == false) {
219
      user001Status = true;
220
      //Serial.println("User 001 Just Signed OUT");
221
      DateTime now;
222
      // fetch the time
223
      now = RTC.now();
224
      // log time
225
      logfile.print('"');
226
      logfile.print(now.year(), DEC);
227
      logfile.print("/");
228
      logfile.print(now.month(), DEC);
229
      logfile.print("/");
230
      logfile.print(now.day(), DEC);
231
      logfile.print('"');
232
      logfile.print(",");
233
      logfile.print(now.hour(), DEC);
234
      logfile.print(":");
235
      logfile.print(now.minute(), DEC);
236
      logfile.print(":");
237
      logfile.print(now.second(), DEC);
238
#if ECHO_TO_SERIAL
239
      Serial.print('"');
240
      Serial.print(now.year(), DEC);
241
      Serial.print("/");
242
      Serial.print(now.month(), DEC);
243
      Serial.print("/");
244
      Serial.print(now.day(), DEC);
245
      Serial.print(" ");
246
      Serial.print(now.hour(), DEC);
247
      Serial.print(":");
248
      Serial.print(now.minute(), DEC);
249
      Serial.print(":");
250
      Serial.print(now.second(), DEC);
251
      Serial.print('"');
252
#endif //ECHO_TO_SERIAL
253
254
      delay(10);
255
256
      logfile.print(", ");
257
      logfile.print("Shahad Just Signed OUT");
258
#if ECHO_TO_SERIAL
259
      Serial.print(", ");
260
      Serial.print("Shahad Just Signed OUT");
261
      lcd.setCursor(0, 1);
262
      lcd.print("Shahad-Sign OUT");
263
      delay(3000);
264
      lcd.setCursor(0, 1);
265
      lcd.print("                ");
266
#endif //ECHO_TO_SERIAL
267
      logfile.println();
268
#if ECHO_TO_SERIAL
269
      Serial.println();
270
#endif // ECHO_TO_SERIAL
271
      // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
272
      // which uses a bunch of power and takes time
273
      if ((millis() - syncTime) < SYNC_INTERVAL) return;
274
      syncTime = millis();
275
      // blink LED to show we are syncing data to the card & updating FAT!
276
      logfile.flush();
277
      delay(1000);
278
    }
279
  }
280
  ///////////////////////////////////////////////////////////////////////// User #001 /end
281
282
  ///////////////////////////////////////////////////////////////////////// User #002 /start       //***** [1]
283
284
  if (content.substring(1) == user002ID)                              //***** [2]
285
  {
286
    if (user002Status == true) {                                      //***** [3]
287
      user002Status = false;                                          //***** [4]
288
289
      DateTime now;
290
      now = RTC.now();
291
      logfile.print('"');
292
      logfile.print(now.year(), DEC);
293
      logfile.print("/");
294
      logfile.print(now.month(), DEC);
295
      logfile.print("/");
296
      logfile.print(now.day(), DEC);
297
      logfile.print('"');
298
      logfile.print(",");
299
      logfile.print(now.hour(), DEC);
300
      logfile.print(":");
301
      logfile.print(now.minute(), DEC);
302
      logfile.print(":");
303
      logfile.print(now.second(), DEC);
304
#if ECHO_TO_SERIAL
305
      Serial.print('"');
306
      Serial.print(now.year(), DEC);
307
      Serial.print("/");
308
      Serial.print(now.month(), DEC);
309
      Serial.print("/");
310
      Serial.print(now.day(), DEC);
311
      Serial.print(" ");
312
      Serial.print(now.hour(), DEC);
313
      Serial.print(":");
314
      Serial.print(now.minute(), DEC);
315
      Serial.print(":");
316
      Serial.print(now.second(), DEC);
317
      Serial.print('"');
318
#endif //ECHO_TO_SERIAL 
319
      delay(10);
320
      logfile.print(", ");
321
      logfile.print("Ayat Alshaabani Just Signed IN");                           //***** [5]
322
#if ECHO_TO_SERIAL
323
      Serial.print(", ");
324
      Serial.print("Ayat Just Signed IN");                            //***** [6]
325
      lcd.setCursor(0, 1);
326
      //        "1234567891234567"    16x characters only #######
327
      lcd.print("Ayat-Sign IN ");                                      //***** [7]
328
      delay(3000);
329
      lcd.setCursor(0, 1);
330
      lcd.print("                ");
331
#endif //ECHO_TO_SERIAL
332
      logfile.println();
333
#if ECHO_TO_SERIAL
334
      Serial.println();
335
#endif // ECHO_TO_SERIAL
336
      if ((millis() - syncTime) < SYNC_INTERVAL) return;
337
      syncTime = millis();
338
      logfile.flush();
339
      delay(1000);
340
    }
341
    else if (user002Status == false) {                                //***** [8]
342
      user002Status = true;                                           //***** [9]
343
      DateTime now;
344
      now = RTC.now();
345
      logfile.print('"');
346
      logfile.print(now.year(), DEC);
347
      logfile.print("/");
348
      logfile.print(now.month(), DEC);
349
      logfile.print("/");
350
      logfile.print(now.day(), DEC);
351
      logfile.print('"');
352
      logfile.print(",");
353
      logfile.print(now.hour(), DEC);
354
      logfile.print(":");
355
      logfile.print(now.minute(), DEC);
356
      logfile.print(":");
357
      logfile.print(now.second(), DEC);
358
#if ECHO_TO_SERIAL
359
      Serial.print('"');
360
      Serial.print(now.year(), DEC);
361
      Serial.print("/");
362
      Serial.print(now.month(), DEC);
363
      Serial.print("/");
364
      Serial.print(now.day(), DEC);
365
      Serial.print(" ");
366
      Serial.print(now.hour(), DEC);
367
      Serial.print(":");
368
      Serial.print(now.minute(), DEC);
369
      Serial.print(":");
370
      Serial.print(now.second(), DEC);
371
      Serial.print('"');
372
#endif //ECHO_TO_SERIAL
373
      delay(10);
374
      logfile.print(", ");
375
      logfile.print("Ayat Alshaabani Just Signed OUT");                          //***** [10]
376
#if ECHO_TO_SERIAL
377
      Serial.print(", ");
378
      Serial.print("Ayat Just Signed OUT");                           //***** [11]
379
      lcd.setCursor(0, 1);
380
      //        "1234567891234567"    16x characters only #######
381
      lcd.print("Ayat-Sign OUT");                                      //***** [12]
382
      delay(3000);
383
      lcd.setCursor(0, 1);
384
      lcd.print("                ");
385
#endif //ECHO_TO_SERIAL
386
      logfile.println();
387
#if ECHO_TO_SERIAL
388
      Serial.println();
389
#endif // ECHO_TO_SERIAL
390
      if ((millis() - syncTime) < SYNC_INTERVAL) return;
391
      syncTime = millis();
392
      logfile.flush();
393
      delay(1000);
394
    }
395
  }
396
  ///////////////////////////////////////////////////////////////////////// User #002 /end      //***** [13]
397
398
}// end of LOOP
399
400
401
void buzz() {
402
  digitalWrite(7, 1);
403
  delay(100);
404
  digitalWrite(7, 0);
405
  delay(50);
406
407
}