Drink Dispensing Program

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE Motor SDFileSystem

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?

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