Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE
main.cpp@0:ce3fa8a3840c, 2019-12-08 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |