![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Drink Dispensing Program
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE Motor SDFileSystem
main.cpp@12:7e6973201e19, 2019-12-09 (annotated)
- Committer:
- njoaquin1
- Date:
- Mon Dec 09 03:43:48 2019 +0000
- Revision:
- 12:7e6973201e19
- Parent:
- 11:0309bef74ba8
Working drink Dispensing Program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
mbed_official | 11:0309bef74ba8 | 2 | #include "rtos.h" |
njoaquin1 | 12:7e6973201e19 | 3 | #include "Motor.h" |
njoaquin1 | 12:7e6973201e19 | 4 | #include "uLCD_4DGL.h" |
njoaquin1 | 12:7e6973201e19 | 5 | |
njoaquin1 | 12:7e6973201e19 | 6 | RawSerial pi(USBTX, USBRX); |
njoaquin1 | 12:7e6973201e19 | 7 | |
njoaquin1 | 12:7e6973201e19 | 8 | Thread thread_drink_1; |
njoaquin1 | 12:7e6973201e19 | 9 | Thread thread_drink_2; |
njoaquin1 | 12:7e6973201e19 | 10 | Thread thread_drink_3; |
njoaquin1 | 12:7e6973201e19 | 11 | Thread thread_drink_4; |
njoaquin1 | 12:7e6973201e19 | 12 | Thread thread_drink_5; |
njoaquin1 | 12:7e6973201e19 | 13 | Thread thread_drink_6; |
njoaquin1 | 12:7e6973201e19 | 14 | //Thread thread_play_song; |
njoaquin1 | 12:7e6973201e19 | 15 | //Thread thread_display_led; |
njoaquin1 | 12:7e6973201e19 | 16 | |
njoaquin1 | 12:7e6973201e19 | 17 | Motor drink1(p21, p5, p6); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 18 | Motor drink2(p22, p7, p8); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 19 | Motor drink3(p23, p9, p10); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 20 | Motor drink4(p24, p11, p12); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 21 | Motor drink5(p25, p13, p14); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 22 | Motor drink6(p26, p15, p16); //pwd, rev, fwd |
njoaquin1 | 12:7e6973201e19 | 23 | |
njoaquin1 | 12:7e6973201e19 | 24 | bool run1 = false; |
njoaquin1 | 12:7e6973201e19 | 25 | bool run2 = false; |
njoaquin1 | 12:7e6973201e19 | 26 | bool run3 = false; |
njoaquin1 | 12:7e6973201e19 | 27 | bool run4 = false; |
njoaquin1 | 12:7e6973201e19 | 28 | bool run5 = false; |
njoaquin1 | 12:7e6973201e19 | 29 | bool run6 = false; |
njoaquin1 | 12:7e6973201e19 | 30 | |
njoaquin1 | 12:7e6973201e19 | 31 | |
njoaquin1 | 12:7e6973201e19 | 32 | int oz1 = 0; |
njoaquin1 | 12:7e6973201e19 | 33 | int oz2 = 0; |
njoaquin1 | 12:7e6973201e19 | 34 | int oz3 = 0; |
njoaquin1 | 12:7e6973201e19 | 35 | int oz4 = 0; |
njoaquin1 | 12:7e6973201e19 | 36 | int oz5 = 0; |
njoaquin1 | 12:7e6973201e19 | 37 | int oz6 = 0; |
njoaquin1 | 12:7e6973201e19 | 38 | |
njoaquin1 | 12:7e6973201e19 | 39 | char drinkName [128]; |
njoaquin1 | 12:7e6973201e19 | 40 | |
njoaquin1 | 12:7e6973201e19 | 41 | // debug shit |
emilmont | 1:491820ee784d | 42 | DigitalOut led1(LED1); |
emilmont | 1:491820ee784d | 43 | DigitalOut led2(LED2); |
njoaquin1 | 12:7e6973201e19 | 44 | DigitalOut led3(LED3); |
njoaquin1 | 12:7e6973201e19 | 45 | DigitalOut led4(LED4); |
njoaquin1 | 12:7e6973201e19 | 46 | |
njoaquin1 | 12:7e6973201e19 | 47 | uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin; |
njoaquin1 | 12:7e6973201e19 | 48 | |
njoaquin1 | 12:7e6973201e19 | 49 | int sec_per_oz = 9000; //msec |
njoaquin1 | 12:7e6973201e19 | 50 | |
njoaquin1 | 12:7e6973201e19 | 51 | |
emilmont | 1:491820ee784d | 52 | |
njoaquin1 | 12:7e6973201e19 | 53 | void drink1_thread() { |
njoaquin1 | 12:7e6973201e19 | 54 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 55 | if (run1) { |
njoaquin1 | 12:7e6973201e19 | 56 | led1 = 1; |
njoaquin1 | 12:7e6973201e19 | 57 | drink1.speed(-1.0); |
njoaquin1 | 12:7e6973201e19 | 58 | Thread::wait(sec_per_oz * oz1); |
njoaquin1 | 12:7e6973201e19 | 59 | drink1.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 60 | led1 = 0; |
njoaquin1 | 12:7e6973201e19 | 61 | run1 = false; |
njoaquin1 | 12:7e6973201e19 | 62 | } |
njoaquin1 | 12:7e6973201e19 | 63 | } |
njoaquin1 | 12:7e6973201e19 | 64 | } |
njoaquin1 | 12:7e6973201e19 | 65 | |
njoaquin1 | 12:7e6973201e19 | 66 | void drink2_thread() { |
emilmont | 1:491820ee784d | 67 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 68 | if (run2) { |
njoaquin1 | 12:7e6973201e19 | 69 | led2 = 1; |
njoaquin1 | 12:7e6973201e19 | 70 | drink2.speed(-1.0); |
njoaquin1 | 12:7e6973201e19 | 71 | Thread::wait(sec_per_oz * oz2); |
njoaquin1 | 12:7e6973201e19 | 72 | drink2.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 73 | led2 = 0; |
njoaquin1 | 12:7e6973201e19 | 74 | run2 = false; |
njoaquin1 | 12:7e6973201e19 | 75 | } |
njoaquin1 | 12:7e6973201e19 | 76 | } |
njoaquin1 | 12:7e6973201e19 | 77 | } |
njoaquin1 | 12:7e6973201e19 | 78 | |
njoaquin1 | 12:7e6973201e19 | 79 | void drink3_thread() { |
njoaquin1 | 12:7e6973201e19 | 80 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 81 | if (run3) { |
njoaquin1 | 12:7e6973201e19 | 82 | led3 = 1; |
njoaquin1 | 12:7e6973201e19 | 83 | drink3.speed(1.0); |
njoaquin1 | 12:7e6973201e19 | 84 | Thread::wait(sec_per_oz * oz3); |
njoaquin1 | 12:7e6973201e19 | 85 | drink3.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 86 | led3 = 0; |
njoaquin1 | 12:7e6973201e19 | 87 | run3 = false; |
njoaquin1 | 12:7e6973201e19 | 88 | } |
njoaquin1 | 12:7e6973201e19 | 89 | } |
njoaquin1 | 12:7e6973201e19 | 90 | } |
njoaquin1 | 12:7e6973201e19 | 91 | |
njoaquin1 | 12:7e6973201e19 | 92 | |
njoaquin1 | 12:7e6973201e19 | 93 | void drink4_thread() { |
njoaquin1 | 12:7e6973201e19 | 94 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 95 | if (run4) { |
njoaquin1 | 12:7e6973201e19 | 96 | led4 = 1; |
njoaquin1 | 12:7e6973201e19 | 97 | drink4.speed(-1.0); |
njoaquin1 | 12:7e6973201e19 | 98 | Thread::wait(sec_per_oz * oz4); |
njoaquin1 | 12:7e6973201e19 | 99 | drink4.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 100 | led4 = 0; |
njoaquin1 | 12:7e6973201e19 | 101 | run4 = false; |
njoaquin1 | 12:7e6973201e19 | 102 | } |
emilmont | 1:491820ee784d | 103 | } |
emilmont | 1:491820ee784d | 104 | } |
emilmont | 1:491820ee784d | 105 | |
njoaquin1 | 12:7e6973201e19 | 106 | |
njoaquin1 | 12:7e6973201e19 | 107 | void drink5_thread() { |
emilmont | 1:491820ee784d | 108 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 109 | if (run5) { |
njoaquin1 | 12:7e6973201e19 | 110 | drink5.speed(1.0); |
njoaquin1 | 12:7e6973201e19 | 111 | Thread::wait(sec_per_oz * oz5); |
njoaquin1 | 12:7e6973201e19 | 112 | drink5.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 113 | run5 = false; |
njoaquin1 | 12:7e6973201e19 | 114 | } |
njoaquin1 | 12:7e6973201e19 | 115 | } |
njoaquin1 | 12:7e6973201e19 | 116 | } |
njoaquin1 | 12:7e6973201e19 | 117 | |
njoaquin1 | 12:7e6973201e19 | 118 | |
njoaquin1 | 12:7e6973201e19 | 119 | void drink6_thread() { |
njoaquin1 | 12:7e6973201e19 | 120 | while (true) { |
njoaquin1 | 12:7e6973201e19 | 121 | if (run6) { |
njoaquin1 | 12:7e6973201e19 | 122 | drink6.speed(1.0); |
njoaquin1 | 12:7e6973201e19 | 123 | Thread::wait(sec_per_oz * oz6); |
njoaquin1 | 12:7e6973201e19 | 124 | drink6.speed(0.0); |
njoaquin1 | 12:7e6973201e19 | 125 | run6 = false; |
njoaquin1 | 12:7e6973201e19 | 126 | } |
emilmont | 1:491820ee784d | 127 | } |
emilmont | 1:491820ee784d | 128 | } |
njoaquin1 | 12:7e6973201e19 | 129 | |
njoaquin1 | 12:7e6973201e19 | 130 | void dev_recv() |
njoaquin1 | 12:7e6973201e19 | 131 | { |
njoaquin1 | 12:7e6973201e19 | 132 | char temp = 0; |
njoaquin1 | 12:7e6973201e19 | 133 | char motorVal = 0; |
njoaquin1 | 12:7e6973201e19 | 134 | int indexVal = 0; |
njoaquin1 | 12:7e6973201e19 | 135 | int ounceNum = 0; |
njoaquin1 | 12:7e6973201e19 | 136 | while(pi.readable()) { |
njoaquin1 | 12:7e6973201e19 | 137 | temp = pi.getc(); |
njoaquin1 | 12:7e6973201e19 | 138 | if (temp == '!') { |
njoaquin1 | 12:7e6973201e19 | 139 | ounceNum = 0; |
njoaquin1 | 12:7e6973201e19 | 140 | indexVal = 0; |
njoaquin1 | 12:7e6973201e19 | 141 | temp = pi.getc(); |
njoaquin1 | 12:7e6973201e19 | 142 | while (temp != '{') { |
njoaquin1 | 12:7e6973201e19 | 143 | drinkName[indexVal] = temp; |
njoaquin1 | 12:7e6973201e19 | 144 | indexVal++; |
njoaquin1 | 12:7e6973201e19 | 145 | temp = pi.getc(); |
njoaquin1 | 12:7e6973201e19 | 146 | } |
njoaquin1 | 12:7e6973201e19 | 147 | drinkName[indexVal] = 0; // null character |
njoaquin1 | 12:7e6973201e19 | 148 | pi.printf("%s\n",drinkName); |
njoaquin1 | 12:7e6973201e19 | 149 | motorVal = pi.getc(); // get motor Value |
njoaquin1 | 12:7e6973201e19 | 150 | while (temp != '}') { |
njoaquin1 | 12:7e6973201e19 | 151 | temp = pi.getc(); // colon |
njoaquin1 | 12:7e6973201e19 | 152 | temp = pi.getc(); // first digit of drink |
njoaquin1 | 12:7e6973201e19 | 153 | ounceNum = 0; |
njoaquin1 | 12:7e6973201e19 | 154 | while (temp != ',') { // get how many ounces |
njoaquin1 | 12:7e6973201e19 | 155 | ounceNum = ounceNum * 10; |
njoaquin1 | 12:7e6973201e19 | 156 | ounceNum = ounceNum + (int)(temp - '0'); |
njoaquin1 | 12:7e6973201e19 | 157 | temp = pi.getc(); |
njoaquin1 | 12:7e6973201e19 | 158 | } |
njoaquin1 | 12:7e6973201e19 | 159 | if (ounceNum > 0) { |
njoaquin1 | 12:7e6973201e19 | 160 | switch(motorVal) { |
njoaquin1 | 12:7e6973201e19 | 161 | case '1': |
njoaquin1 | 12:7e6973201e19 | 162 | oz1 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 163 | run1 = true; |
njoaquin1 | 12:7e6973201e19 | 164 | break; |
njoaquin1 | 12:7e6973201e19 | 165 | case '2': |
njoaquin1 | 12:7e6973201e19 | 166 | oz2 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 167 | run2 = true; |
njoaquin1 | 12:7e6973201e19 | 168 | break; |
njoaquin1 | 12:7e6973201e19 | 169 | case '3': |
njoaquin1 | 12:7e6973201e19 | 170 | oz3 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 171 | run3 = true; |
njoaquin1 | 12:7e6973201e19 | 172 | break; |
njoaquin1 | 12:7e6973201e19 | 173 | case '4': |
njoaquin1 | 12:7e6973201e19 | 174 | oz4 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 175 | run4 = true; |
njoaquin1 | 12:7e6973201e19 | 176 | break; |
njoaquin1 | 12:7e6973201e19 | 177 | case '5': |
njoaquin1 | 12:7e6973201e19 | 178 | oz5 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 179 | run5 = true; |
njoaquin1 | 12:7e6973201e19 | 180 | break; |
njoaquin1 | 12:7e6973201e19 | 181 | case '6': |
njoaquin1 | 12:7e6973201e19 | 182 | oz6 = ounceNum; |
njoaquin1 | 12:7e6973201e19 | 183 | run6 = true; |
njoaquin1 | 12:7e6973201e19 | 184 | break; |
njoaquin1 | 12:7e6973201e19 | 185 | default: |
njoaquin1 | 12:7e6973201e19 | 186 | break; |
njoaquin1 | 12:7e6973201e19 | 187 | } |
njoaquin1 | 12:7e6973201e19 | 188 | } |
njoaquin1 | 12:7e6973201e19 | 189 | temp = pi.getc(); |
njoaquin1 | 12:7e6973201e19 | 190 | if (temp != ',') { |
njoaquin1 | 12:7e6973201e19 | 191 | motorVal = temp; |
njoaquin1 | 12:7e6973201e19 | 192 | } |
njoaquin1 | 12:7e6973201e19 | 193 | } |
njoaquin1 | 12:7e6973201e19 | 194 | } |
njoaquin1 | 12:7e6973201e19 | 195 | } |
njoaquin1 | 12:7e6973201e19 | 196 | } |
njoaquin1 | 12:7e6973201e19 | 197 | int main() { |
njoaquin1 | 12:7e6973201e19 | 198 | thread_drink_1.start(drink1_thread); |
njoaquin1 | 12:7e6973201e19 | 199 | thread_drink_2.start(drink2_thread); |
njoaquin1 | 12:7e6973201e19 | 200 | thread_drink_3.start(drink3_thread); |
njoaquin1 | 12:7e6973201e19 | 201 | thread_drink_4.start(drink4_thread); |
njoaquin1 | 12:7e6973201e19 | 202 | thread_drink_5.start(drink5_thread); |
njoaquin1 | 12:7e6973201e19 | 203 | thread_drink_6.start(drink6_thread); |
njoaquin1 | 12:7e6973201e19 | 204 | //thread_play_song.start(); |
njoaquin1 | 12:7e6973201e19 | 205 | //thread_display_led.start(); |
njoaquin1 | 12:7e6973201e19 | 206 | uLCD.cls(); |
njoaquin1 | 12:7e6973201e19 | 207 | uLCD.text_width(2); //4X size text |
njoaquin1 | 12:7e6973201e19 | 208 | uLCD.text_height(2); |
njoaquin1 | 12:7e6973201e19 | 209 | uLCD.printf("DrinkBot\n 4000"); |
njoaquin1 | 12:7e6973201e19 | 210 | pi.baud(9600); |
njoaquin1 | 12:7e6973201e19 | 211 | pi.attach(&dev_recv, Serial::RxIrq); |
njoaquin1 | 12:7e6973201e19 | 212 | while(1) { |
njoaquin1 | 12:7e6973201e19 | 213 | sleep(); |
njoaquin1 | 12:7e6973201e19 | 214 | } |
njoaquin1 | 12:7e6973201e19 | 215 | } |