Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.44 KB | None | 0 0
  1. #include <SPI.h> //
  2. #include <MFRC522.h> // Library for RFID Reader
  3. #include <Wire.h> //
  4. #include <OnewireKeypad.h> // Library for Keypad
  5. #include <LiquidCrystal_I2C.h> // Library for LCD I2C
  6. #include <Servo.h> // Library for Servo Motor
  7.  
  8. Servo servo;
  9. int servoPos = 30;
  10.  
  11. #define innerSensorPin 2
  12. #define buzzerPin 6
  13. int gateSensorPin = 3; //IR sensor on gate to arduino pin 3
  14.  
  15. int innerSensor = 0;
  16. int outerSensor = 0;
  17.  
  18. #define RST_PIN 9
  19. #define SS_PIN 10
  20.  
  21. int card1Balance = 5000;
  22. int card2Balance = 300;
  23.  
  24. #define num 7
  25. char Data[num];
  26. byte data_count = 0;
  27.  
  28. String num1, num2, card, card2;
  29. int a, b;
  30. char Key;
  31.  
  32. bool recharge = false; // default recharge false
  33. bool paid = false; // to tell that the default is not paid
  34.  
  35. int slot1 = 5; //#1 slot parking
  36. int slot2 = 4; //#2 Slot parking
  37.  
  38. int slot1_LED = A0; // SLot 1 led
  39. int slot2_LED = A1; // slot 2 led
  40. int gate_grn = A2;
  41. int gate_red = A3;
  42.  
  43.  
  44. char KEYS[] = {
  45. '1', '2', '3', 'A',
  46. '4', '5', '6', 'B',
  47. '7', '8', '9', 'C',
  48. '*', '0', '#', 'D',
  49. };
  50.  
  51. OnewireKeypad <Print, 16 > KP2(Serial, KEYS, 4, 4, 7, 4700, 1000, ExtremePrec );
  52. LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  53. MFRC522 mfrc522(SS_PIN, RST_PIN);
  54.  
  55. void setup () {
  56. servo.attach(8);
  57.  
  58. servo.write(30);
  59. pinMode(slot1,INPUT); //setting slot pins & gate IR sensor as input to arduino
  60. pinMode(slot2,INPUT);
  61. pinMode(gateSensorPin,INPUT);
  62. pinMode(slot1_LED,OUTPUT);
  63. pinMode(slot2_LED,OUTPUT);
  64. pinMode(gate_grn,OUTPUT);
  65. pinMode(gate_red,OUTPUT);
  66. Serial.begin(9600); //initialzing Serial monitor
  67.  
  68. lcd.begin(16, 2);
  69. pinMode(innerSensorPin, INPUT);
  70. pinMode(buzzerPin, OUTPUT);
  71.  
  72. KP2.SetKeypadVoltage(5.0);
  73.  
  74. SPI.begin();
  75. mfrc522.PCD_Init();
  76.  
  77. lcd.setCursor(0, 0);
  78. lcd.print("Automatic Toll");
  79. lcd.setCursor(0, 1);
  80. lcd.print("colection system");
  81. delay(3000);
  82. }
  83. void loop()
  84. {
  85. //the car arrives and sensor goes LOW
  86.  
  87. if(!(digitalRead(gateSensorPin)) && digitalRead(slot1) && digitalRead(slot2)) //slot1 & slot2 empty
  88. {
  89. lcd.clear();
  90. lcd.setCursor(0,0);
  91. lcd.print("Available:"); //print slot1 and slo2 available
  92. lcd.setCursor(0,1);
  93. lcd.print("Slot1, Slot2"); //print slot1 and slo2 available
  94. analogWrite(slot1_LED,222);
  95. analogWrite(slot2_LED,222);
  96. delay(1000);
  97. analogWrite(gate_grn,222);
  98. //gate.write(75); //gate will open after the dealy of 1 second
  99. }
  100. else if( !(digitalRead(gateSensorPin)) && !(digitalRead(slot1)) && digitalRead(slot2)) //car on slot1,slot2 free
  101. {
  102. lcd.clear();
  103. lcd.setCursor(0,0);
  104. lcd.print("Available:"); //print slot1 and slo2 available
  105. lcd.setCursor(0,1);
  106. lcd.print("Slot2"); //print slot1 and slo2 available
  107.  
  108. analogWrite(slot1_LED,0);
  109. analogWrite(slot2_LED,222);
  110. delay(1000);
  111. analogWrite(gate_grn,222);
  112. //gate.write(75); //gate will open after the dealy of 1 second
  113. }
  114. else if( !(digitalRead(gateSensorPin)) && digitalRead(slot1) && !(digitalRead(slot2))) //car on slot2,slot1 free
  115. {
  116. lcd.clear();
  117. lcd.setCursor(0,0);
  118. lcd.print("Available:"); //print slot1 and slo2 available
  119. lcd.setCursor(0,1);
  120. lcd.print("Slot1"); //print slot1 and slo2 available
  121. analogWrite(slot1_LED,222);
  122. analogWrite(slot2_LED,0);
  123. delay(1000);
  124. analogWrite(gate_grn,222);
  125. //gate.write(75);
  126. //delay(100); //gate will open after the dealy of 1 second
  127. }
  128. else if( !(digitalRead(gateSensorPin)) && !(digitalRead(slot1)) && !(digitalRead(slot2)))
  129. {
  130. lcd.clear();
  131. lcd.setCursor(0,0);
  132. lcd.print("Available:"); //print slot1 and slo2 available
  133. lcd.setCursor(0,1);
  134. lcd.print("Parking is Full"); //print slot1 and slo2 available
  135. analogWrite(slot1_LED,0);
  136. analogWrite(slot2_LED,0);
  137. delay(1000);
  138. analogWrite(gate_red,222);
  139. delay(100);
  140. analogWrite(gate_red,0);
  141. delay(100);
  142. analogWrite(gate_red,222);
  143. delay(100);
  144. analogWrite(gate_red,0);
  145. }
  146. else if( digitalRead(gateSensorPin)) //no input detected
  147. {
  148. lcd.clear();
  149. Serial.println("Welcome");
  150. //gate.write(5); //gate close
  151. analogWrite(slot1_LED,0);
  152. analogWrite(slot2_LED,0);
  153. analogWrite(gate_red,0);
  154. analogWrite(gate_grn,222); //yellow/green light will blink from here
  155. delay(100);
  156. analogWrite(gate_grn,0);
  157. delay(100);
  158. }
  159. if (recharge)
  160. {
  161. reCharge();
  162. }
  163. else{
  164. if((digitalRead(slot1)) || (digitalRead(slot2))){
  165. sensorRead();
  166. check_RFID();
  167. KeyPad();
  168. if (innerSensor == 0) // if there's a vehicle inside
  169. {
  170. //servoDown();
  171. servo.attach(8);
  172. servo.write(30);
  173. lcd.clear();
  174. lcd.setCursor(0, 0);
  175. lcd.print("Vehicle detected");
  176. delay(1000);
  177. lcd.clear();
  178. lcd.setCursor(0, 0);
  179. lcd.print("Put your card to");
  180. lcd.setCursor(0, 1);
  181. lcd.print("the reader......");
  182. delay(2000);
  183. lcd.clear();
  184.  
  185. }
  186. else if (outerSensor == 0 && paid) // if there's a vehicle at the gate and paid
  187. {
  188. //servoUp();
  189. servo.attach(8);
  190. servo.write(120);
  191. lcd.clear();
  192. lcd.setCursor(0, 0);
  193. lcd.print("Have a safe");
  194. lcd.setCursor(0, 1);
  195. lcd.print("journey");
  196. delay(1000);
  197. lcd.clear();
  198. paid = false;
  199. }
  200. }
  201. }
  202. }
  203.  
  204. void servoDown()
  205. {
  206. servo.attach(8);
  207. for (int servoPosTemp=servoPos; servoPosTemp <= 120; servoPosTemp += 1)
  208. {
  209. servo.write(servoPosTemp);
  210. delay(5);
  211. servoPos=servoPosTemp;
  212. }
  213. }
  214.  
  215. void servoUp()
  216. {
  217. servo.attach(8);
  218. for (int servoPosTemp=servoPos; servoPosTemp >= 30; servoPosTemp -= 1)
  219. {
  220. servo.write(servoPosTemp);
  221. delay(5);
  222. servoPos=servoPosTemp;
  223. }
  224. }
  225.  
  226. void sensorRead()
  227. {
  228. innerSensor = digitalRead(innerSensorPin);
  229. outerSensor = digitalRead(gateSensorPin);
  230. }
  231.  
  232. void check_RFID()
  233. {
  234. if ( ! mfrc522.PICC_IsNewCardPresent())
  235. {
  236. return;
  237. }
  238. if ( ! mfrc522.PICC_ReadCardSerial())
  239. {
  240. return;
  241. }
  242.  
  243. String content = "";
  244. for (byte i = 0; i < mfrc522.uid.size; i++)
  245. {
  246. content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  247. content.concat(String(mfrc522.uid.uidByte[i], HEX));
  248. }
  249. content.toUpperCase();
  250.  
  251. if (content.substring(1) == "D3 D0 E4 24")
  252. {
  253. if (card1Balance >= 500)
  254. {
  255. successfullyPaid();
  256. card1Balance = card1Balance - 500;
  257. lcd.setCursor(9, 1);
  258. lcd.print(card1Balance);
  259. delay(2000);
  260. lcd.clear();
  261. paid = true;
  262. }
  263. else
  264. {
  265. card = content.substring(1);
  266. failToPay();
  267. lcd.setCursor(9, 1);
  268. lcd.print(card1Balance);
  269. lcd.print(" Tk");
  270. delay(2000);
  271. lcd.clear();
  272. lcd.setCursor(0, 0);
  273. lcd.print("Please Recharge");
  274. delay(1000);
  275. lcd.clear();
  276. paid = false;
  277. }
  278. }
  279. else if (content.substring(1) == "E3 06 19 D3")
  280. {
  281. if (card2Balance >= 500)
  282. {
  283. successfullyPaid();
  284. card2Balance = card2Balance - 500;
  285. lcd.setCursor(9, 1);
  286. lcd.print(card2Balance);
  287. delay(2000);
  288. lcd.clear();
  289. paid = true;
  290. }
  291. else
  292. {
  293. card = content.substring(1);
  294. failToPay();
  295. lcd.setCursor(9, 1);
  296. lcd.print(card2Balance);
  297. lcd.print(" Tk");
  298. delay(2000);
  299. lcd.clear();
  300. lcd.setCursor(0, 0);
  301. lcd.print("Please Recharge");
  302. lcd.clear();
  303. delay(1000);
  304. paid = false;
  305. }
  306. }
  307. else{
  308. digitalWrite(buzzerPin, HIGH);
  309. lcd.setCursor(0, 0);
  310. lcd.print("Unknown Vehicle");
  311. lcd.setCursor(0, 1);
  312. lcd.print("Access denied");
  313. delay(1500);
  314. lcd.clear();
  315. digitalWrite(buzzerPin, LOW);
  316. }
  317. }
  318.  
  319. void KeyPad()
  320. {
  321. byte KState = KP2.Key_State();
  322.  
  323. if (KState == PRESSED)
  324. {
  325. Key = KP2.Getkey();
  326. if (Key)
  327. {
  328. if (Key == 'A')
  329. {
  330. lcd.clear();
  331. lcd.setCursor(0, 0);
  332. lcd.print("Recharging Mode.");
  333. lcd.setCursor(0, 1);
  334. lcd.print("................");
  335. delay(1500);
  336. lcd.clear();
  337. recharge = true;
  338. }
  339. }
  340. }
  341. }
  342.  
  343. void clearData()
  344. {
  345. while (data_count != 0)
  346. {
  347. Data[data_count--] = 0;
  348. }
  349. return;
  350. }
  351.  
  352. void reCharge()
  353. {
  354.  
  355. lcd.setCursor(0, 0);
  356. lcd.print ("Enter the amount");
  357.  
  358. byte KState = KP2.Key_State();
  359.  
  360. if (KState == PRESSED)
  361. {
  362. Key = KP2.Getkey();
  363. if (Key)
  364. {
  365. if (Key == '#')
  366. {
  367. if (card == "D3 D0 E4 24")
  368. {
  369. num1 = Data;
  370. card1Balance = num1.toInt() + card1Balance;
  371. lcd.clear();
  372. lcd.setCursor(0, 0);
  373. lcd.print("Your current");
  374. lcd.setCursor(0, 1);
  375. lcd.print("balance: ");
  376. lcd.setCursor(9, 1);
  377. lcd.print (card1Balance);
  378. lcd.print(" Tk");
  379. delay(3000);
  380. clearData();
  381. lcd.clear();
  382. recharge = 1;
  383. }
  384. else if (card == "E3 06 19 D3")
  385. {
  386. num2 = Data;
  387. card2Balance = num2.toInt() + card2Balance;
  388. lcd.clear();
  389. lcd.setCursor(0, 0);
  390. lcd.print("Your current");
  391. lcd.setCursor(0, 1);
  392. lcd.print("balance: ");
  393. lcd.setCursor(9, 1);
  394. lcd.print (card2Balance);
  395. lcd.print(" Tk");
  396. delay(3000);
  397. clearData();
  398. lcd.clear();
  399. recharge = 1;
  400. }
  401. }
  402. else
  403. {
  404. Data[data_count] = Key;
  405. lcd.setCursor(data_count, 1);
  406. lcd.print(Data[data_count]);
  407. data_count++;
  408. }
  409. }
  410. }
  411. }
  412.  
  413. void successfullyPaid()
  414. {
  415. digitalWrite(buzzerPin, HIGH);
  416. delay(200);
  417. digitalWrite(buzzerPin, LOW);
  418. delay(100);
  419. lcd.clear();
  420. lcd.setCursor(0, 0);
  421. lcd.print(" Successfully");
  422. lcd.setCursor(0, 1);
  423. lcd.print(" paid your bill");
  424. delay(1500);
  425. lcd.clear();
  426. lcd.setCursor(0, 0);
  427. lcd.print("Your Remaining");
  428. lcd.setCursor(0, 1);
  429. lcd.print("balance: ");
  430. }
  431.  
  432. void failToPay()
  433. {
  434. digitalWrite(buzzerPin, HIGH);
  435. delay(200);
  436. digitalWrite(buzzerPin, LOW);
  437. delay(100);
  438. lcd.clear();
  439. lcd.setCursor(0, 0);
  440. lcd.print(" Your balance");
  441. lcd.setCursor(0, 1);
  442. lcd.print(" is insufficent");
  443. delay(1500);
  444. lcd.clear();
  445. lcd.setCursor(0, 0);
  446. lcd.print("Your Remaining");
  447. lcd.setCursor(0, 1);
  448. lcd.print("balance: ");
  449. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement