Isaac Grynsztein / Mbed 2 deprecated ketchup_bot

Dependencies:   mbed mbed-rtos Motor HC_SR04_Ultrasonic_Library

Committer:
tzahi12345
Date:
Mon Dec 09 04:49:58 2019 +0000
Revision:
0:a36c747fb7e0
a commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tzahi12345 0:a36c747fb7e0 1 #include "mbed.h"
tzahi12345 0:a36c747fb7e0 2 #include "Motor.h"
tzahi12345 0:a36c747fb7e0 3 #include "rtos.h"
tzahi12345 0:a36c747fb7e0 4 #include "ultrasonic.h"
tzahi12345 0:a36c747fb7e0 5
tzahi12345 0:a36c747fb7e0 6 // THREADS
tzahi12345 0:a36c747fb7e0 7
tzahi12345 0:a36c747fb7e0 8 Thread dispenseThread;
tzahi12345 0:a36c747fb7e0 9
tzahi12345 0:a36c747fb7e0 10 // BLUETOOTH
tzahi12345 0:a36c747fb7e0 11
tzahi12345 0:a36c747fb7e0 12 Serial blue(p28,p27);
tzahi12345 0:a36c747fb7e0 13
tzahi12345 0:a36c747fb7e0 14 // MOTOR
tzahi12345 0:a36c747fb7e0 15
tzahi12345 0:a36c747fb7e0 16 Motor ketch(p21, p11, p12); // pwm, fwd, rev
tzahi12345 0:a36c747fb7e0 17
tzahi12345 0:a36c747fb7e0 18 // DEBUG
tzahi12345 0:a36c747fb7e0 19
tzahi12345 0:a36c747fb7e0 20 DigitalOut debugLED(LED1);
tzahi12345 0:a36c747fb7e0 21 DigitalOut errorLED(LED4);
tzahi12345 0:a36c747fb7e0 22
tzahi12345 0:a36c747fb7e0 23 // SONAR
tzahi12345 0:a36c747fb7e0 24 int global_distance;
tzahi12345 0:a36c747fb7e0 25
tzahi12345 0:a36c747fb7e0 26 void dist(int a_distance)
tzahi12345 0:a36c747fb7e0 27 {
tzahi12345 0:a36c747fb7e0 28 global_distance = a_distance;
tzahi12345 0:a36c747fb7e0 29 }
tzahi12345 0:a36c747fb7e0 30 ultrasonic mu(p6, p7, .1, 1, &dist); //Set the trigger pin to D8 and the echo pin to D9
tzahi12345 0:a36c747fb7e0 31 //have updates every .1 seconds and a timeout after 1
tzahi12345 0:a36c747fb7e0 32 //second, and call dist when the distance changes
tzahi12345 0:a36c747fb7e0 33 // Servo ketch(p21);
tzahi12345 0:a36c747fb7e0 34
tzahi12345 0:a36c747fb7e0 35
tzahi12345 0:a36c747fb7e0 36 bool ketchupDispensing = false;
tzahi12345 0:a36c747fb7e0 37
tzahi12345 0:a36c747fb7e0 38 void dispenseKetchup() {
tzahi12345 0:a36c747fb7e0 39 if (ketchupDispensing) {
tzahi12345 0:a36c747fb7e0 40 // already dispensing the ketch
tzahi12345 0:a36c747fb7e0 41 return;
tzahi12345 0:a36c747fb7e0 42 }
tzahi12345 0:a36c747fb7e0 43
tzahi12345 0:a36c747fb7e0 44 // set dispensing flag
tzahi12345 0:a36c747fb7e0 45 ketchupDispensing = true;
tzahi12345 0:a36c747fb7e0 46
tzahi12345 0:a36c747fb7e0 47 //dispense
tzahi12345 0:a36c747fb7e0 48 ketch.speed(1.0f);
tzahi12345 0:a36c747fb7e0 49 }
tzahi12345 0:a36c747fb7e0 50
tzahi12345 0:a36c747fb7e0 51 void stopDispenseKetchup() {
tzahi12345 0:a36c747fb7e0 52 if (!ketchupDispensing) {
tzahi12345 0:a36c747fb7e0 53 // not dispensing, you can't stop no ketch, so just return
tzahi12345 0:a36c747fb7e0 54 return;
tzahi12345 0:a36c747fb7e0 55 }
tzahi12345 0:a36c747fb7e0 56
tzahi12345 0:a36c747fb7e0 57 // unset dispensing flag
tzahi12345 0:a36c747fb7e0 58 ketchupDispensing = false;
tzahi12345 0:a36c747fb7e0 59 ketch.speed(0.0f);
tzahi12345 0:a36c747fb7e0 60
tzahi12345 0:a36c747fb7e0 61 // turns debug LEDs off just in case
tzahi12345 0:a36c747fb7e0 62 debugLED = 0;
tzahi12345 0:a36c747fb7e0 63 errorLED = 0;
tzahi12345 0:a36c747fb7e0 64 }
tzahi12345 0:a36c747fb7e0 65
tzahi12345 0:a36c747fb7e0 66 void dispenseSomeKetchup() {
tzahi12345 0:a36c747fb7e0 67 if (global_distance < 150) {
tzahi12345 0:a36c747fb7e0 68 debugLED = 1;
tzahi12345 0:a36c747fb7e0 69 printf("In thread, dispensing ketchup\n");
tzahi12345 0:a36c747fb7e0 70 dispenseKetchup();
tzahi12345 0:a36c747fb7e0 71 Thread::wait(1750);
tzahi12345 0:a36c747fb7e0 72 stopDispenseKetchup();
tzahi12345 0:a36c747fb7e0 73 printf("Stopped dispense\n");
tzahi12345 0:a36c747fb7e0 74 debugLED = 0;
tzahi12345 0:a36c747fb7e0 75 } else {
tzahi12345 0:a36c747fb7e0 76 debugLED = 1;
tzahi12345 0:a36c747fb7e0 77 errorLED = 1;
tzahi12345 0:a36c747fb7e0 78 Thread::wait(1750);
tzahi12345 0:a36c747fb7e0 79 debugLED = 0;
tzahi12345 0:a36c747fb7e0 80 errorLED = 0;
tzahi12345 0:a36c747fb7e0 81 }
tzahi12345 0:a36c747fb7e0 82 }
tzahi12345 0:a36c747fb7e0 83
tzahi12345 0:a36c747fb7e0 84 void dispenseMuchKetchup() {
tzahi12345 0:a36c747fb7e0 85 if (global_distance < 150) {
tzahi12345 0:a36c747fb7e0 86 debugLED = 1;
tzahi12345 0:a36c747fb7e0 87 printf("In thread, dispensing ketchup\n");
tzahi12345 0:a36c747fb7e0 88 dispenseKetchup();
tzahi12345 0:a36c747fb7e0 89 Thread::wait(3500);
tzahi12345 0:a36c747fb7e0 90 stopDispenseKetchup();
tzahi12345 0:a36c747fb7e0 91 printf("Stopped dispense\n");
tzahi12345 0:a36c747fb7e0 92 debugLED = 0;
tzahi12345 0:a36c747fb7e0 93 } else {
tzahi12345 0:a36c747fb7e0 94 debugLED = 1;
tzahi12345 0:a36c747fb7e0 95 errorLED = 1;
tzahi12345 0:a36c747fb7e0 96 Thread::wait(1750);
tzahi12345 0:a36c747fb7e0 97 debugLED = 0;
tzahi12345 0:a36c747fb7e0 98 errorLED = 0;
tzahi12345 0:a36c747fb7e0 99 }
tzahi12345 0:a36c747fb7e0 100 }
tzahi12345 0:a36c747fb7e0 101
tzahi12345 0:a36c747fb7e0 102 void dispenseKetchupInfinitely() {
tzahi12345 0:a36c747fb7e0 103 if (global_distance < 150) {
tzahi12345 0:a36c747fb7e0 104 debugLED = 1;
tzahi12345 0:a36c747fb7e0 105 printf("In thread, dispensing ketchup continuous\n");
tzahi12345 0:a36c747fb7e0 106 dispenseKetchup();
tzahi12345 0:a36c747fb7e0 107 } else {
tzahi12345 0:a36c747fb7e0 108 debugLED = 1;
tzahi12345 0:a36c747fb7e0 109 errorLED = 1;
tzahi12345 0:a36c747fb7e0 110 Thread::wait(1750);
tzahi12345 0:a36c747fb7e0 111 debugLED = 0;
tzahi12345 0:a36c747fb7e0 112 errorLED = 0;
tzahi12345 0:a36c747fb7e0 113 }
tzahi12345 0:a36c747fb7e0 114 }
tzahi12345 0:a36c747fb7e0 115
tzahi12345 0:a36c747fb7e0 116 int main()
tzahi12345 0:a36c747fb7e0 117 {
tzahi12345 0:a36c747fb7e0 118 mu.startUpdates();//start measuring the distance
tzahi12345 0:a36c747fb7e0 119 debugLED = 1;
tzahi12345 0:a36c747fb7e0 120 ketch.speed(1.0f);
tzahi12345 0:a36c747fb7e0 121 Thread::wait(1000);
tzahi12345 0:a36c747fb7e0 122 ketch.speed(0.0f);
tzahi12345 0:a36c747fb7e0 123 debugLED = 0;
tzahi12345 0:a36c747fb7e0 124 while(1) {
tzahi12345 0:a36c747fb7e0 125 //Do something else here
tzahi12345 0:a36c747fb7e0 126 mu.checkDistance(); //call checkDistance() as much as possible, as this is where
tzahi12345 0:a36c747fb7e0 127 //the class checks if dist needs to be called.
tzahi12345 0:a36c747fb7e0 128 char bnum;
tzahi12345 0:a36c747fb7e0 129 if (blue.getc()=='!') {
tzahi12345 0:a36c747fb7e0 130 if (blue.getc()=='B') { //button data
tzahi12345 0:a36c747fb7e0 131 bnum = blue.getc(); //button number
tzahi12345 0:a36c747fb7e0 132 printf("bnum is %c", bnum);
tzahi12345 0:a36c747fb7e0 133 if ((bnum>='1')&&(bnum<='4')) //is a number button 1..4
tzahi12345 0:a36c747fb7e0 134 {
tzahi12345 0:a36c747fb7e0 135 if (bnum == '1') {
tzahi12345 0:a36c747fb7e0 136 // dispense some ketchup
tzahi12345 0:a36c747fb7e0 137 printf("Starting thread\n");
tzahi12345 0:a36c747fb7e0 138 dispenseThread.start(dispenseSomeKetchup);
tzahi12345 0:a36c747fb7e0 139 } else if (bnum == '2') {
tzahi12345 0:a36c747fb7e0 140 // dispense a lot of ketchup
tzahi12345 0:a36c747fb7e0 141 dispenseMuchKetchup();
tzahi12345 0:a36c747fb7e0 142 } else if (bnum == '3') {
tzahi12345 0:a36c747fb7e0 143 // infinite ketchup
tzahi12345 0:a36c747fb7e0 144 dispenseKetchupInfinitely();
tzahi12345 0:a36c747fb7e0 145 } else if (bnum == '4') {
tzahi12345 0:a36c747fb7e0 146 // stop dispense ketchup
tzahi12345 0:a36c747fb7e0 147 stopDispenseKetchup();
tzahi12345 0:a36c747fb7e0 148 }
tzahi12345 0:a36c747fb7e0 149 }
tzahi12345 0:a36c747fb7e0 150 }
tzahi12345 0:a36c747fb7e0 151 }
tzahi12345 0:a36c747fb7e0 152 }
tzahi12345 0:a36c747fb7e0 153 }