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 Dustin Campbell

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?

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