David Li / Mbed 2 deprecated final_projec_4180

Dependencies:   mbed 4DGL-uLCD-SE

Committer:
datyvk
Date:
Mon Dec 09 13:02:42 2019 +0000
Revision:
1:fc3efaef8625
Parent:
0:ce3fa8a3840c
speaker;

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 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 }