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