Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "Servo.h" 00003 #include "hcsr04.h" 00004 #include "Thread.h" 00005 00006 //pin connections 00007 Serial pc(USBTX, USBRX); 00008 Servo myservo(PTA1); 00009 AnalogIn force(A0); 00010 HCSR04 usensor(D8,D9); //ECHO Pin=D9, TRIG Pin=D8 00011 DigitalOut red(LED1); 00012 Serial HC06(PTC15, PTC14); //BT TX, RX 00013 00014 Thread t1; 00015 Thread t2; 00016 Thread t3; 00017 00018 Mutex open; //mutex for door 00019 00020 //force sensor thread 00021 void force_open() { 00022 float weight; 00023 int door = 0; 00024 00025 while(1) { 00026 //read analog pin 00027 weight = force.read(); 00028 printf("force = %f\r\n", weight * 1000); 00029 00030 //if object detected or user asks for serving and door closed, then open 00031 if((weight*1000) >= 200 && door == 0) { 00032 open.lock(); //lock 00033 00034 myservo.write(0.0); 00035 door = 1; 00036 00037 wait(0.25); 00038 //if open for .25 seconds, close - portion control 00039 myservo.write(0.75); 00040 00041 open.unlock(); //unlock 00042 door = 0; 00043 } 00044 00045 wait(5); //look for bowl every 5 seconds 00046 } 00047 } 00048 00049 //bluetooth control thread 00050 void bt_open() { 00051 00052 char bt; 00053 int door = 0; 00054 00055 while(1) { 00056 00057 //data from BT 00058 if(HC06.readable()) 00059 { 00060 //read 00061 bt = HC06.getc(); 00062 printf("BT=%c\n\r", bt); 00063 //open 00064 if(bt == '3' && door == 0) { 00065 open.lock(); //lock 00066 00067 myservo.write(0.0); 00068 door = 1; 00069 printf("BT START\n\r"); 00070 } 00071 //close - no timer! 00072 else if(bt == '4' && door == 1) { 00073 myservo.write(0.75); 00074 door = 0; 00075 open.unlock(); //unlock 00076 00077 printf("BT STOP\n\r"); 00078 } 00079 } 00080 } 00081 } 00082 00083 //ultrasonic thread 00084 void empty_detect() { 00085 int dist; 00086 int count = 0; 00087 00088 while(1) { 00089 usensor.start(); 00090 00091 wait_ms(500); 00092 dist = usensor.get_dist_cm(); //read 00093 printf("distance = %d\n\r", dist); 00094 00095 //food is there 00096 if(dist > 0 && dist < 28) { 00097 red = 1; 00098 HC06.printf("0"); 00099 } 00100 else { //empty 00101 red = 0; //turn on red light 00102 00103 if(count % 10 == 0) 00104 { 00105 //bluetooth message 00106 HC06.printf("1"); 00107 printf("----------------------------------------------\n\r"); 00108 printf("Notifying user that refill is needed\n\r"); 00109 printf("----------------------------------------------\n\r"); 00110 } 00111 count++; //for frequent notification 00112 } 00113 } 00114 } 00115 00116 int main() 00117 { 00118 printf("Welcome to Cereal Dispenser\n\r"); 00119 usensor.start(); 00120 00121 red = 1; //LED off 00122 00123 while(1) { 00124 00125 //start threads 00126 t1.start(force_open); 00127 t2.start(bt_open); 00128 t3.start(empty_detect); 00129 } 00130 }
Generated on Tue Jul 26 2022 12:08:25 by
1.7.2