David Li / Mbed 2 deprecated final_projec_4180

Dependencies:   mbed 4DGL-uLCD-SE

Committer:
datyvk
Date:
Sun Dec 08 18:56:02 2019 +0000
Revision:
0:ce3fa8a3840c
Child:
1:fc3efaef8625
project first publish;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
datyvk 0:ce3fa8a3840c 1 #include "mbed.h"
datyvk 0:ce3fa8a3840c 2 #include "uLCD_4DGL.h"
datyvk 0:ce3fa8a3840c 3 #include "Speaker.h"
datyvk 0:ce3fa8a3840c 4
datyvk 0:ce3fa8a3840c 5 AnalogIn light1(p19);
datyvk 0:ce3fa8a3840c 6 AnalogIn light2(p18);
datyvk 0:ce3fa8a3840c 7 DigitalIn button(p8);
datyvk 0:ce3fa8a3840c 8 DigitalOut led(p26);
datyvk 0:ce3fa8a3840c 9 PwmOut speaker(p25);
datyvk 0:ce3fa8a3840c 10
datyvk 0:ce3fa8a3840c 11 DigitalOut mag2(p20);
datyvk 0:ce3fa8a3840c 12 DigitalOut mag1(p21);
datyvk 0:ce3fa8a3840c 13 Serial blue(p28,p27);
datyvk 0:ce3fa8a3840c 14 BusOut myled(LED1,LED2,LED3,LED4);
datyvk 0:ce3fa8a3840c 15 uLCD_4DGL uLCD(p9,p10,p11);
datyvk 0:ce3fa8a3840c 16 Serial pc(USBTX, USBRX);
datyvk 0:ce3fa8a3840c 17 typedef struct Locker {
datyvk 0:ce3fa8a3840c 18 int used;
datyvk 0:ce3fa8a3840c 19 int code;
datyvk 0:ce3fa8a3840c 20 } Locker;
datyvk 0:ce3fa8a3840c 21
datyvk 0:ce3fa8a3840c 22 struct Locker l1 = {0, 1234};
datyvk 0:ce3fa8a3840c 23 struct Locker l2 = {0, 4321};
datyvk 0:ce3fa8a3840c 24 void wait_loop() {
datyvk 0:ce3fa8a3840c 25 int j = 0;
datyvk 0:ce3fa8a3840c 26 for (int i = 0; i < 50000; i++) {
datyvk 0:ce3fa8a3840c 27 j++;
datyvk 0:ce3fa8a3840c 28 }
datyvk 0:ce3fa8a3840c 29 }
datyvk 0:ce3fa8a3840c 30 void fill() {
datyvk 0:ce3fa8a3840c 31 uLCD.filled_rectangle(0, 0, 128, 128, 0x000000);
datyvk 0:ce3fa8a3840c 32 uLCD.locate(0,0);
datyvk 0:ce3fa8a3840c 33 }
datyvk 0:ce3fa8a3840c 34 int read_code() {
datyvk 0:ce3fa8a3840c 35 char bnum=0;
datyvk 0:ce3fa8a3840c 36 int ans = 0;
datyvk 0:ce3fa8a3840c 37 int len = 0;
datyvk 0:ce3fa8a3840c 38 uLCD.printf("\nEnter code\n");
datyvk 0:ce3fa8a3840c 39 while(len < 8) {
datyvk 0:ce3fa8a3840c 40 if (blue.getc()=='!') {
datyvk 0:ce3fa8a3840c 41 if (blue.getc()=='B') { //button data packet
datyvk 0:ce3fa8a3840c 42 bnum = blue.getc(); //button number
datyvk 0:ce3fa8a3840c 43 myled = bnum - '0';
datyvk 0:ce3fa8a3840c 44 len++;
datyvk 0:ce3fa8a3840c 45 if (len % 2 == 1) {
datyvk 0:ce3fa8a3840c 46 ans = ans * 10 + (bnum - '0');
datyvk 0:ce3fa8a3840c 47 uLCD.printf("%d", bnum - '0');
datyvk 0:ce3fa8a3840c 48 }
datyvk 0:ce3fa8a3840c 49 }
datyvk 0:ce3fa8a3840c 50 }
datyvk 0:ce3fa8a3840c 51 }
datyvk 0:ce3fa8a3840c 52 fill();
datyvk 0:ce3fa8a3840c 53 wait(1);
datyvk 0:ce3fa8a3840c 54 return ans;
datyvk 0:ce3fa8a3840c 55 }
datyvk 0:ce3fa8a3840c 56
datyvk 0:ce3fa8a3840c 57 int read_which_locker() {
datyvk 0:ce3fa8a3840c 58 char bnum=0;
datyvk 0:ce3fa8a3840c 59 int ans = 0;
datyvk 0:ce3fa8a3840c 60 int len = 0;
datyvk 0:ce3fa8a3840c 61 uLCD.printf("\nEnter Locker");
datyvk 0:ce3fa8a3840c 62 while(len < 2) {
datyvk 0:ce3fa8a3840c 63 if (blue.getc()=='!') {
datyvk 0:ce3fa8a3840c 64 if (blue.getc()=='B') { //button data packet
datyvk 0:ce3fa8a3840c 65 bnum = blue.getc(); //button number
datyvk 0:ce3fa8a3840c 66 ans = bnum - '0';
datyvk 0:ce3fa8a3840c 67 fill();
datyvk 0:ce3fa8a3840c 68 uLCD.printf("%d",ans);
datyvk 0:ce3fa8a3840c 69 len++;
datyvk 0:ce3fa8a3840c 70 }
datyvk 0:ce3fa8a3840c 71 }
datyvk 0:ce3fa8a3840c 72 }
datyvk 0:ce3fa8a3840c 73 fill();
datyvk 0:ce3fa8a3840c 74 wait(1);
datyvk 0:ce3fa8a3840c 75 return ans;
datyvk 0:ce3fa8a3840c 76 }
datyvk 0:ce3fa8a3840c 77
datyvk 0:ce3fa8a3840c 78 int rent_or_open() {
datyvk 0:ce3fa8a3840c 79 char bnum=0;
datyvk 0:ce3fa8a3840c 80 int ans = 0;
datyvk 0:ce3fa8a3840c 81 int len = 0;
datyvk 0:ce3fa8a3840c 82 uLCD.printf("\n1.Rent a locker\n2.Unlock an locker");
datyvk 0:ce3fa8a3840c 83 while(len < 2) {
datyvk 0:ce3fa8a3840c 84 if (blue.getc()=='!') {
datyvk 0:ce3fa8a3840c 85 if (blue.getc()=='B') { //button data packet
datyvk 0:ce3fa8a3840c 86 bnum = blue.getc(); //button number
datyvk 0:ce3fa8a3840c 87 ans = bnum - '0';
datyvk 0:ce3fa8a3840c 88 uLCD.printf("%d",ans);
datyvk 0:ce3fa8a3840c 89 len++;
datyvk 0:ce3fa8a3840c 90 }
datyvk 0:ce3fa8a3840c 91 }
datyvk 0:ce3fa8a3840c 92 }
datyvk 0:ce3fa8a3840c 93 fill();
datyvk 0:ce3fa8a3840c 94 wait(1);
datyvk 0:ce3fa8a3840c 95 return ans;
datyvk 0:ce3fa8a3840c 96 }
datyvk 0:ce3fa8a3840c 97
datyvk 0:ce3fa8a3840c 98 void open_used() {
datyvk 0:ce3fa8a3840c 99 int locker = read_which_locker();
datyvk 0:ce3fa8a3840c 100 wait_loop();
datyvk 0:ce3fa8a3840c 101
datyvk 0:ce3fa8a3840c 102 if (locker == 1 && l1.used == 0) {
datyvk 0:ce3fa8a3840c 103 uLCD.printf("\nThe locker is empty");
datyvk 0:ce3fa8a3840c 104 wait(1);
datyvk 0:ce3fa8a3840c 105 return;
datyvk 0:ce3fa8a3840c 106 }
datyvk 0:ce3fa8a3840c 107
datyvk 0:ce3fa8a3840c 108 if (locker == 2 && l2.used == 0) {
datyvk 0:ce3fa8a3840c 109 uLCD.printf("\nThe locker is empty");
datyvk 0:ce3fa8a3840c 110 wait(1);
datyvk 0:ce3fa8a3840c 111 return;
datyvk 0:ce3fa8a3840c 112 }
datyvk 0:ce3fa8a3840c 113 int code = read_code();
datyvk 0:ce3fa8a3840c 114 fill();
datyvk 0:ce3fa8a3840c 115 if (locker == 1 && l1.code == code) {
datyvk 0:ce3fa8a3840c 116 uLCD.printf("\nLocker 1 is now open");
datyvk 0:ce3fa8a3840c 117 mag1 = 1;
datyvk 0:ce3fa8a3840c 118 int lock = 0;
datyvk 0:ce3fa8a3840c 119 while(light1.read() > .05 || lock == 0) {
datyvk 0:ce3fa8a3840c 120 lock = lock | button.read();
datyvk 0:ce3fa8a3840c 121 }
datyvk 0:ce3fa8a3840c 122 mag1 = 0;
datyvk 0:ce3fa8a3840c 123 l1.used = 0;
datyvk 0:ce3fa8a3840c 124 } else if (locker == 2 && l2.code == code) {
datyvk 0:ce3fa8a3840c 125 uLCD.printf("\nLocker 2 is now open");
datyvk 0:ce3fa8a3840c 126 mag2 = 1;
datyvk 0:ce3fa8a3840c 127 int lock = 0;
datyvk 0:ce3fa8a3840c 128 while(light2.read() > .01 || lock == 0) {
datyvk 0:ce3fa8a3840c 129 lock = lock | button.read();
datyvk 0:ce3fa8a3840c 130 }
datyvk 0:ce3fa8a3840c 131 mag2 = 0;
datyvk 0:ce3fa8a3840c 132 l2.used = 0;
datyvk 0:ce3fa8a3840c 133 } else {
datyvk 0:ce3fa8a3840c 134 uLCD.printf("\nInvlaid locker and code combination");
datyvk 0:ce3fa8a3840c 135 led = 1;
datyvk 0:ce3fa8a3840c 136 speaker = .5;
datyvk 0:ce3fa8a3840c 137 wait(.5);
datyvk 0:ce3fa8a3840c 138 led = 0;
datyvk 0:ce3fa8a3840c 139 speaker = 0;
datyvk 0:ce3fa8a3840c 140 wait(.5);
datyvk 0:ce3fa8a3840c 141 led = 1;
datyvk 0:ce3fa8a3840c 142 speaker = .5;
datyvk 0:ce3fa8a3840c 143 wait(.5);
datyvk 0:ce3fa8a3840c 144 led = 0;
datyvk 0:ce3fa8a3840c 145 speaker = 0;
datyvk 0:ce3fa8a3840c 146 wait(.5);
datyvk 0:ce3fa8a3840c 147
datyvk 0:ce3fa8a3840c 148 }
datyvk 0:ce3fa8a3840c 149 }
datyvk 0:ce3fa8a3840c 150
datyvk 0:ce3fa8a3840c 151 void rent_unused(){
datyvk 0:ce3fa8a3840c 152 if (l1.used == 0) {
datyvk 0:ce3fa8a3840c 153 uLCD.printf("\nPlease place item in locker 1, create a code, and close the door");
datyvk 0:ce3fa8a3840c 154 mag1 = 1;
datyvk 0:ce3fa8a3840c 155 int code = read_code();
datyvk 0:ce3fa8a3840c 156 l1.code = code;
datyvk 0:ce3fa8a3840c 157 l1.used = 1;
datyvk 0:ce3fa8a3840c 158 mag1 = 0;
datyvk 0:ce3fa8a3840c 159
datyvk 0:ce3fa8a3840c 160 } else if (l2.used == 0) {
datyvk 0:ce3fa8a3840c 161 uLCD.printf("\nPlease place item in locker 2, create a code, and close the door");
datyvk 0:ce3fa8a3840c 162 mag2 = 1;
datyvk 0:ce3fa8a3840c 163 int code = read_code();
datyvk 0:ce3fa8a3840c 164 l2.code = code;
datyvk 0:ce3fa8a3840c 165 l2.used = 1;
datyvk 0:ce3fa8a3840c 166 mag2 = 0;
datyvk 0:ce3fa8a3840c 167
datyvk 0:ce3fa8a3840c 168 } else {
datyvk 0:ce3fa8a3840c 169 uLCD.printf("\nSorry all lockers are taken");
datyvk 0:ce3fa8a3840c 170 wait(1);
datyvk 0:ce3fa8a3840c 171 }
datyvk 0:ce3fa8a3840c 172 }
datyvk 0:ce3fa8a3840c 173
datyvk 0:ce3fa8a3840c 174 int main() {
datyvk 0:ce3fa8a3840c 175 mag1 = 0;
datyvk 0:ce3fa8a3840c 176 mag2 = 0;
datyvk 0:ce3fa8a3840c 177 speaker.period(1.0/5000.0);
datyvk 0:ce3fa8a3840c 178 while(1){
datyvk 0:ce3fa8a3840c 179 uLCD.locate(0,0);
datyvk 0:ce3fa8a3840c 180 uLCD.printf("Welcome to\n our locker"); //Default Green on black text
datyvk 0:ce3fa8a3840c 181 int option = rent_or_open();
datyvk 0:ce3fa8a3840c 182 if (option == 1) {
datyvk 0:ce3fa8a3840c 183 rent_unused();
datyvk 0:ce3fa8a3840c 184 } else if (option == 2) {
datyvk 0:ce3fa8a3840c 185 open_used();
datyvk 0:ce3fa8a3840c 186 } else {
datyvk 0:ce3fa8a3840c 187 uLCD.printf("\nPlease enter valid option");
datyvk 0:ce3fa8a3840c 188 }
datyvk 0:ce3fa8a3840c 189 uLCD.reset();
datyvk 0:ce3fa8a3840c 190
datyvk 0:ce3fa8a3840c 191 }
datyvk 0:ce3fa8a3840c 192 }