Custom phone app that controls cup dispenser, drink dispenser, and conveyor belt using the mbed blue tooth capabilities.
Dependencies: Motor Servo mbed
Fork of 4180_WDDDS by
main.cpp@0:5e54c5a00e68, 2017-04-29 (annotated)
- Committer:
- djrox316
- Date:
- Sat Apr 29 07:57:58 2017 +0000
- Revision:
- 0:5e54c5a00e68
4180 Final Project Version 1, Wireless Drink Dispenser Delivery System
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
djrox316 | 0:5e54c5a00e68 | 1 | // Demonstrates complete use of the WDDDS systems and functionalities: |
djrox316 | 0:5e54c5a00e68 | 2 | // Cup dispenser, dispensing drink 1, dispensing drink 2, and conveyor belt. |
djrox316 | 0:5e54c5a00e68 | 3 | // This code: |
djrox316 | 0:5e54c5a00e68 | 4 | // - dispenses a cup, moves the cup under the drink dispenser, dispenses drink 1 |
djrox316 | 0:5e54c5a00e68 | 5 | // then moves cup further along treads when button 1 is pressed |
djrox316 | 0:5e54c5a00e68 | 6 | // - dispenses a cup, moves the cup under the drink dispenser, dispenses drink 2 |
djrox316 | 0:5e54c5a00e68 | 7 | // then moves cup further along treads when button 2 is pressed |
djrox316 | 0:5e54c5a00e68 | 8 | // - 4th button is used for unjamming the cup dispenser, as it will extend the |
djrox316 | 0:5e54c5a00e68 | 9 | // linear actuator further to push cups out. |
djrox316 | 0:5e54c5a00e68 | 10 | |
djrox316 | 0:5e54c5a00e68 | 11 | #include "mbed.h" |
djrox316 | 0:5e54c5a00e68 | 12 | #include "Motor.h" |
djrox316 | 0:5e54c5a00e68 | 13 | #include "Servo.h" |
djrox316 | 0:5e54c5a00e68 | 14 | |
djrox316 | 0:5e54c5a00e68 | 15 | Servo poker(p22); |
djrox316 | 0:5e54c5a00e68 | 16 | DigitalIn stby(p25); |
djrox316 | 0:5e54c5a00e68 | 17 | Motor tread(p24, p12, p11); // pwm, fwd, rev (H-bridge) |
djrox316 | 0:5e54c5a00e68 | 18 | Motor pump(p26, p13, p14); // pwm, fwd, rev (H-bridge) |
djrox316 | 0:5e54c5a00e68 | 19 | DigitalOut tread2(p21); // MOSFET |
djrox316 | 0:5e54c5a00e68 | 20 | BusOut myled(LED1,LED2,LED3,LED4); // check for which button is pressed |
djrox316 | 0:5e54c5a00e68 | 21 | Serial blue(p28,p27); // Bluetooth |
djrox316 | 0:5e54c5a00e68 | 22 | float cupos = 850; |
djrox316 | 0:5e54c5a00e68 | 23 | void cupdispense(); |
djrox316 | 0:5e54c5a00e68 | 24 | void drink1(); |
djrox316 | 0:5e54c5a00e68 | 25 | void drink2(); |
djrox316 | 0:5e54c5a00e68 | 26 | void treads(float time); |
djrox316 | 0:5e54c5a00e68 | 27 | |
djrox316 | 0:5e54c5a00e68 | 28 | int main() |
djrox316 | 0:5e54c5a00e68 | 29 | { |
djrox316 | 0:5e54c5a00e68 | 30 | poker.Enable(1500,20000); |
djrox316 | 0:5e54c5a00e68 | 31 | poker.SetPosition(cupos); |
djrox316 | 0:5e54c5a00e68 | 32 | wait(.2); |
djrox316 | 0:5e54c5a00e68 | 33 | poker.SetPosition(cupos+10); |
djrox316 | 0:5e54c5a00e68 | 34 | stby.mode(PullUp); |
djrox316 | 0:5e54c5a00e68 | 35 | char bnum=0; |
djrox316 | 0:5e54c5a00e68 | 36 | char bhit=0; |
djrox316 | 0:5e54c5a00e68 | 37 | while(1) { |
djrox316 | 0:5e54c5a00e68 | 38 | if (blue.getc()=='!') { |
djrox316 | 0:5e54c5a00e68 | 39 | if (blue.getc()=='B') { //button data packet |
djrox316 | 0:5e54c5a00e68 | 40 | bnum = blue.getc(); //button number |
djrox316 | 0:5e54c5a00e68 | 41 | bhit = blue.getc(); //1=hit, 0=release |
djrox316 | 0:5e54c5a00e68 | 42 | if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
djrox316 | 0:5e54c5a00e68 | 43 | myled = bnum - '0'; //current button number will appear on LEDs |
djrox316 | 0:5e54c5a00e68 | 44 | switch (bnum) { |
djrox316 | 0:5e54c5a00e68 | 45 | case '1': //number button 1 |
djrox316 | 0:5e54c5a00e68 | 46 | if (bhit=='1') { |
djrox316 | 0:5e54c5a00e68 | 47 | //add hit code here |
djrox316 | 0:5e54c5a00e68 | 48 | drink1(); |
djrox316 | 0:5e54c5a00e68 | 49 | |
djrox316 | 0:5e54c5a00e68 | 50 | } else { |
djrox316 | 0:5e54c5a00e68 | 51 | //add release code here |
djrox316 | 0:5e54c5a00e68 | 52 | } |
djrox316 | 0:5e54c5a00e68 | 53 | break; |
djrox316 | 0:5e54c5a00e68 | 54 | case '2': //number button 2 |
djrox316 | 0:5e54c5a00e68 | 55 | if (bhit=='1') { |
djrox316 | 0:5e54c5a00e68 | 56 | //add hit code here |
djrox316 | 0:5e54c5a00e68 | 57 | drink2(); |
djrox316 | 0:5e54c5a00e68 | 58 | } else { |
djrox316 | 0:5e54c5a00e68 | 59 | //add release code here |
djrox316 | 0:5e54c5a00e68 | 60 | } |
djrox316 | 0:5e54c5a00e68 | 61 | break; |
djrox316 | 0:5e54c5a00e68 | 62 | case '3': //number button 3 |
djrox316 | 0:5e54c5a00e68 | 63 | if (bhit=='1') { |
djrox316 | 0:5e54c5a00e68 | 64 | //add hit code here |
djrox316 | 0:5e54c5a00e68 | 65 | } else { |
djrox316 | 0:5e54c5a00e68 | 66 | //add release code here |
djrox316 | 0:5e54c5a00e68 | 67 | } |
djrox316 | 0:5e54c5a00e68 | 68 | break; |
djrox316 | 0:5e54c5a00e68 | 69 | case '4': //number button 4 |
djrox316 | 0:5e54c5a00e68 | 70 | if (bhit=='1') { |
djrox316 | 0:5e54c5a00e68 | 71 | //add hit code here |
djrox316 | 0:5e54c5a00e68 | 72 | cupdispense(); |
djrox316 | 0:5e54c5a00e68 | 73 | } else { |
djrox316 | 0:5e54c5a00e68 | 74 | //add release code here |
djrox316 | 0:5e54c5a00e68 | 75 | } |
djrox316 | 0:5e54c5a00e68 | 76 | break; |
djrox316 | 0:5e54c5a00e68 | 77 | default: |
djrox316 | 0:5e54c5a00e68 | 78 | break; |
djrox316 | 0:5e54c5a00e68 | 79 | } |
djrox316 | 0:5e54c5a00e68 | 80 | } |
djrox316 | 0:5e54c5a00e68 | 81 | } |
djrox316 | 0:5e54c5a00e68 | 82 | } |
djrox316 | 0:5e54c5a00e68 | 83 | } |
djrox316 | 0:5e54c5a00e68 | 84 | } |
djrox316 | 0:5e54c5a00e68 | 85 | |
djrox316 | 0:5e54c5a00e68 | 86 | void cupdispense(){ |
djrox316 | 0:5e54c5a00e68 | 87 | if( cupos <2500) { |
djrox316 | 0:5e54c5a00e68 | 88 | cupos += 52; |
djrox316 | 0:5e54c5a00e68 | 89 | wait_ms(400); |
djrox316 | 0:5e54c5a00e68 | 90 | poker.SetPosition(cupos); |
djrox316 | 0:5e54c5a00e68 | 91 | cupos += 53; |
djrox316 | 0:5e54c5a00e68 | 92 | poker.SetPosition(cupos); |
djrox316 | 0:5e54c5a00e68 | 93 | wait_ms(100); |
djrox316 | 0:5e54c5a00e68 | 94 | } |
djrox316 | 0:5e54c5a00e68 | 95 | } |
djrox316 | 0:5e54c5a00e68 | 96 | |
djrox316 | 0:5e54c5a00e68 | 97 | void drink1(){ |
djrox316 | 0:5e54c5a00e68 | 98 | // cupdispense(); |
djrox316 | 0:5e54c5a00e68 | 99 | //wait(3.5); |
djrox316 | 0:5e54c5a00e68 | 100 | treads(.68); |
djrox316 | 0:5e54c5a00e68 | 101 | wait(.4); |
djrox316 | 0:5e54c5a00e68 | 102 | pump.speed(1); |
djrox316 | 0:5e54c5a00e68 | 103 | wait(2); |
djrox316 | 0:5e54c5a00e68 | 104 | pump.speed(0); |
djrox316 | 0:5e54c5a00e68 | 105 | wait(5); |
djrox316 | 0:5e54c5a00e68 | 106 | treads(1); |
djrox316 | 0:5e54c5a00e68 | 107 | } |
djrox316 | 0:5e54c5a00e68 | 108 | |
djrox316 | 0:5e54c5a00e68 | 109 | void drink2(){ |
djrox316 | 0:5e54c5a00e68 | 110 | // cupdispense(); |
djrox316 | 0:5e54c5a00e68 | 111 | //wait(3.5); |
djrox316 | 0:5e54c5a00e68 | 112 | treads(.68); |
djrox316 | 0:5e54c5a00e68 | 113 | wait(.4); |
djrox316 | 0:5e54c5a00e68 | 114 | pump.speed(-1); |
djrox316 | 0:5e54c5a00e68 | 115 | wait(2); |
djrox316 | 0:5e54c5a00e68 | 116 | pump.speed(0); |
djrox316 | 0:5e54c5a00e68 | 117 | wait(5); |
djrox316 | 0:5e54c5a00e68 | 118 | treads(1); |
djrox316 | 0:5e54c5a00e68 | 119 | } |
djrox316 | 0:5e54c5a00e68 | 120 | |
djrox316 | 0:5e54c5a00e68 | 121 | void treads(float time) { |
djrox316 | 0:5e54c5a00e68 | 122 | tread.speed(.4); |
djrox316 | 0:5e54c5a00e68 | 123 | tread2 = 1; |
djrox316 | 0:5e54c5a00e68 | 124 | wait(time); |
djrox316 | 0:5e54c5a00e68 | 125 | tread.speed(0); |
djrox316 | 0:5e54c5a00e68 | 126 | tread2 = 0; |
djrox316 | 0:5e54c5a00e68 | 127 | } |