Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.84 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <MFRC522.h>
  3. #include <OnewireKeypad.h>
  4. #include <LiquidCrystal.h>
  5. #include <Servo.h>
  6.  
  7. LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
  8.  
  9. Servo servo;
  10. int servoPos = 0;
  11.  
  12. #define sensorPin1 A2
  13. #define sensorPin2 A3
  14. #define buzzerPin A4
  15.  
  16. int senVal1 = 0;
  17. int senVal2 = 0;
  18.  
  19. #define RST_PIN 8
  20. #define SS_PIN 10
  21.  
  22. int card1Balance = 5000;
  23. int card2Balance = 300;
  24.  
  25. #define num 7
  26. char Data[num];
  27. byte data_count = 0;
  28.  
  29. String num1, num2, card, card2;
  30. int a, b;
  31. char Key;
  32.  
  33. bool recharge = true;
  34.  
  35. MFRC522 mfrc522(SS_PIN, RST_PIN);
  36.  
  37. int state = 0;
  38.  
  39. char KEYS[] = {
  40. '1', '2', '3', 'A',
  41. '4', '5', '6', 'B',
  42. '7', '8', '9', 'C',
  43. '*', '0', '#', 'D'
  44. };
  45.  
  46. OnewireKeypad <Print, 16 > KP2(Serial, KEYS, 4, 4, A0, 4700, 1000, ExtremePrec );
  47.  
  48. void setup () {
  49. lcd.begin(16, 2);
  50. Serial.begin(9600);
  51.  
  52. servo.attach(9);
  53.  
  54. servo.write(30);
  55.  
  56. pinMode(sensorPin1, INPUT);
  57. pinMode(sensorPin2, INPUT);
  58. pinMode(buzzerPin, OUTPUT);
  59.  
  60. KP2.SetKeypadVoltage(5.0);
  61.  
  62. SPI.begin();
  63. mfrc522.PCD_Init();
  64.  
  65. lcd.setCursor(0, 0);
  66. lcd.print(" Automatic toll");
  67. lcd.setCursor(0, 1);
  68. lcd.print("colection system");
  69. delay(3000);
  70. lcd.clear();
  71. }
  72. void loop()
  73. {
  74.  
  75. if (recharge == 0)
  76. {
  77. reCharge();
  78. }
  79. else
  80. {
  81. lcd.setCursor(0, 0);
  82. lcd.print(" Welcome!!!");
  83. sensorRead();
  84. rfid();
  85. KeyPad();
  86. if (senVal1 == 0)
  87. {
  88. servoDown();
  89. lcd.clear();
  90. lcd.setCursor(0, 0);
  91. lcd.print("Vehicle detected");
  92. delay(1000);
  93. lcd.clear();
  94. lcd.setCursor(0, 0);
  95. lcd.print("Put your card to");
  96. lcd.setCursor(0, 1);
  97. lcd.print("the reader......");
  98. delay(2000);
  99. lcd.clear();
  100.  
  101. }
  102. else if (senVal2 == 0 && state == 1)
  103. {
  104. servoUp();
  105. lcd.clear();
  106. lcd.setCursor(0, 0);
  107. lcd.print("Have a safe");
  108. lcd.setCursor(0, 1);
  109. lcd.print("journey");
  110. delay(1000);
  111. lcd.clear();
  112. state = 0;
  113. }
  114. }
  115. }
  116.  
  117. void servoDown()
  118. {
  119. servo.attach(9);
  120. for (servoPos = 30; servoPos <= 120; servoPos += 1)
  121. {
  122. servo.write(servoPos);
  123. delay(5);
  124. }
  125. }
  126.  
  127. void servoUp()
  128. {
  129. servo.attach(9);
  130. for (servoPos = 120; servoPos >= 30; servoPos -= 1)
  131. {
  132. servo.write(servoPos);
  133. delay(5);
  134. }
  135. }
  136.  
  137. void sensorRead()
  138. {
  139. senVal1 = digitalRead(sensorPin1);
  140. senVal2 = digitalRead(sensorPin2);
  141. }
  142.  
  143. void rfid()
  144. {
  145. if ( ! mfrc522.PICC_IsNewCardPresent())
  146. {
  147. return;
  148. }
  149. if ( ! mfrc522.PICC_ReadCardSerial())
  150. {
  151. return;
  152. }
  153.  
  154. String content = "";
  155. for (byte i = 0; i < mfrc522.uid.size; i++)
  156. {
  157. content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  158. content.concat(String(mfrc522.uid.uidByte[i], HEX));
  159. }
  160. content.toUpperCase();
  161.  
  162. if (content.substring(1) == "73 50 76 2E")
  163. {
  164. if (card1Balance >= 500)
  165. {
  166. lcdPrint();
  167. card1Balance = card1Balance - 500;
  168. lcd.setCursor(9, 1);
  169. lcd.print(card1Balance);
  170. delay(2000);
  171. lcd.clear();
  172. state = 1;
  173. }
  174. else
  175. {
  176. card = content.substring(1);
  177. LcdPrint();
  178. lcd.setCursor(9, 1);
  179. lcd.print(card1Balance);
  180. lcd.print(" Tk");
  181. delay(2000);
  182. lcd.clear();
  183. lcd.setCursor(0, 0);
  184. lcd.print("Please Recharge");
  185. delay(1000);
  186. lcd.clear();
  187. state = 0;
  188. }
  189. }
  190. else if (content.substring(1) == "F4 C2 37 BB")
  191. {
  192. if (card2Balance >= 500)
  193. {
  194. lcdPrint();
  195. card2Balance = card2Balance - 500;
  196. lcd.setCursor(9, 1);
  197. lcd.print(card2Balance);
  198. delay(2000);
  199. lcd.clear();
  200. state = 1;
  201. }
  202. else
  203. {
  204. card = content.substring(1);
  205. LcdPrint();
  206. lcd.setCursor(9, 1);
  207. lcd.print(card2Balance);
  208. lcd.print(" Tk");
  209. delay(2000);
  210. lcd.clear();
  211. lcd.setCursor(0, 0);
  212. lcd.print("Please Recharge");
  213. lcd.clear();
  214. delay(1000);
  215. state = 0;
  216. }
  217. }
  218.  
  219. else {
  220. digitalWrite(buzzerPin, HIGH);
  221. lcd.setCursor(0, 0);
  222. lcd.print("Unknown Vehicle");
  223. lcd.setCursor(0, 1);
  224. lcd.print("Access denied");
  225. delay(1500);
  226. lcd.clear();
  227. digitalWrite(buzzerPin, LOW);
  228. }
  229. }
  230.  
  231. void KeyPad()
  232. {
  233. byte KState = KP2.Key_State();
  234.  
  235. if (KState == PRESSED)
  236. {
  237. Key = KP2.Getkey();
  238. if (Key)
  239. {
  240. if (Key == 'A')
  241. {
  242. lcd.clear();
  243. lcd.setCursor(0, 0);
  244. lcd.print("Recharging Mode.");
  245. lcd.setCursor(0, 1);
  246. lcd.print("................");
  247. delay(1500);
  248. lcd.clear();
  249. recharge = 0;
  250. }
  251. }
  252. }
  253. }
  254.  
  255. void clearData()
  256. {
  257. while (data_count != 0)
  258. {
  259. Data[data_count--] = 0;
  260. }
  261. return;
  262. }
  263.  
  264. void reCharge()
  265. {
  266.  
  267. lcd.setCursor(0, 0);
  268. lcd.print ("Enter the amount");
  269.  
  270. byte KState = KP2.Key_State();
  271.  
  272. if (KState == PRESSED)
  273. {
  274. Key = KP2.Getkey();
  275. if (Key)
  276. {
  277. if (Key == 'D')
  278. {
  279. if (card == "73 50 76 2E")
  280. {
  281. num1 = Data;
  282. card1Balance = num1.toInt() + card1Balance;
  283. lcd.clear();
  284. lcd.setCursor(0, 0);
  285. lcd.print("Your current");
  286. lcd.setCursor(0, 1);
  287. lcd.print("balance: ");
  288. lcd.setCursor(9, 1);
  289. lcd.print (card1Balance);
  290. lcd.print(" Tk");
  291. delay(3000);
  292. clearData();
  293. lcd.clear();
  294. recharge = 1;
  295. }
  296. else if (card == "F4 C2 37 BB")
  297. {
  298. num2 = Data;
  299. card2Balance = num2.toInt() + card2Balance;
  300. lcd.clear();
  301. lcd.setCursor(0, 0);
  302. lcd.print("Your current");
  303. lcd.setCursor(0, 1);
  304. lcd.print("balance: ");
  305. lcd.setCursor(9, 1);
  306. lcd.print (card2Balance);
  307. lcd.print(" Tk");
  308. delay(3000);
  309. clearData();
  310. lcd.clear();
  311. recharge = 1;
  312. }
  313. }
  314. else
  315. {
  316. Data[data_count] = Key;
  317. lcd.setCursor(data_count, 1);
  318. lcd.print(Data[data_count]);
  319. data_count++;
  320. }
  321. }
  322. }
  323. }
  324. void lcdPrint()
  325. {
  326. digitalWrite(buzzerPin, HIGH);
  327. delay(200);
  328. digitalWrite(buzzerPin, LOW);
  329. delay(100);
  330. lcd.clear();
  331. lcd.setCursor(0, 0);
  332. lcd.print(" Successfully");
  333. lcd.setCursor(0, 1);
  334. lcd.print(" paid your bill");
  335. delay(1500);
  336. lcd.clear();
  337. lcd.setCursor(0, 0);
  338. lcd.print("Your Remaining");
  339. lcd.setCursor(0, 1);
  340. lcd.print("balance: ");
  341. }
  342.  
  343. void LcdPrint()
  344. {
  345. digitalWrite(buzzerPin, HIGH);
  346. delay(200);
  347. digitalWrite(buzzerPin, LOW);
  348. delay(100);
  349. lcd.clear();
  350. lcd.setCursor(0, 0);
  351. lcd.print(" Your balance");
  352. lcd.setCursor(0, 1);
  353. lcd.print(" is insufficent");
  354. delay(1500);
  355. lcd.clear();
  356. lcd.setCursor(0, 0);
  357. lcd.print("Your Remaining");
  358. lcd.setCursor(0, 1);
  359. lcd.print("balance: ");
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement