Automatic cocktail maker

Dependencies:   mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include <algorithm>
00004 
00005 using namespace std;
00006 
00007 DigitalOut latch(p9);
00008 DigitalOut enable(p10);
00009  
00010 SPI spi(p11, p12, p13);
00011 
00012 DigitalOut valve1(p15);
00013 DigitalOut valve2(p16);
00014 DigitalOut valve3(p17);
00015 
00016 AnalogIn distSensor(p20);
00017 
00018 DigitalOut led1(LED1);
00019 DigitalOut led2(LED2);
00020 DigitalOut led3(LED3);
00021 
00022 Serial pc(USBTX, USBRX);
00023 //uLCD_4DGL lcd(p28, p27, p30);
00024 
00025 int vTime[3];
00026 bool t_enabled;
00027 osThreadId mainThreadID;
00028 
00029 void RGB_LED(int red, int green, int blue) {
00030     unsigned int low_color=0;
00031     unsigned int high_color=0;
00032     high_color=(blue<<4)|((red&0x3C0)>>6);
00033     low_color=(((red&0x3F)<<10)|(green));
00034     spi.write(high_color);
00035     spi.write(low_color);
00036     latch=1;
00037     latch=0;
00038 }
00039 
00040 void thread1(void const *args)
00041 {
00042     while (1)
00043     {
00044         if (t_enabled)
00045         {
00046             valve1 = 1; led1 = 1;
00047             int waitTime = (int)(vTime[0] * 100);
00048             Thread::wait(waitTime);
00049             valve1 = 0; led1 = 0;
00050             t_enabled = false;
00051             osSignalSet(mainThreadID, 0x1);
00052         }
00053     }
00054 }
00055 
00056 void thread2(void const *args)
00057 {
00058     while (1)
00059     {
00060         if (t_enabled)
00061         {
00062             valve2 = 1; led2 = 1;
00063             int waitTime = (int)(vTime[1] * 100);
00064             Thread::wait(waitTime);
00065             valve2 = 0; led2 = 0;
00066             t_enabled = false;
00067             osSignalSet(mainThreadID, 0x2);
00068         }
00069     }
00070 }
00071 
00072 void thread3(void const *args)
00073 {
00074     while (1)
00075     {
00076         if (t_enabled)
00077         {
00078             valve3 = 1; led3 = 1;
00079             int waitTime = (int)(vTime[2] * 100);
00080             Thread::wait(waitTime);
00081             valve3 = 0; led3 = 0;
00082             t_enabled = false;
00083             osSignalSet(mainThreadID, 0x4);
00084         }
00085     }
00086 }
00087 
00088 void thread4(void const *args)
00089 {
00090     int red=0;
00091     int green=0;
00092     int blue=0;
00093     while(1) {
00094         for (red = 0; red<1000; red = red+200) {
00095             for (blue = 0; blue<1000; blue = blue+200) {
00096                 for (green = 0; green<1000; green = green+200)
00097      
00098                 {
00099                     RGB_LED( red, green, blue);
00100                     Thread::wait(250);
00101                 }
00102             }
00103         }
00104     }
00105 }
00106 
00107 void thread5(void const * args)
00108 {
00109     Thread::wait(15000);
00110     while (1)
00111     {      
00112         //bool flag = false;
00113         //pc.printf("%f\n", distSensor);
00114         if (distSensor > 0.05)
00115         {
00116             pc.putc('l');
00117             //pc.putc(' ');    
00118              //wait(0.5);
00119             //Thread::wait(12000000);
00120             break;
00121         }
00122         //Thread::wait(500);
00123     }
00124 }
00125 
00126 int main()
00127 {
00128     mainThreadID = osThreadGetId();
00129     Thread t1(thread1);
00130     Thread t2(thread2);
00131     Thread t3(thread3);
00132     Thread t4(thread4);
00133     //Thread t5(thread5);
00134     t_enabled = false;
00135     char message;
00136     char msg[10];
00137     char m[4];
00138     
00139 
00140     spi.format(16,0);
00141     spi.frequency(500000);
00142     enable=0;
00143     latch=0;
00144     wait(10);
00145     while(distSensor < 0.05) {}
00146     pc.putc('l');
00147 
00148     int i;
00149     while (1)
00150     {
00151         if (pc.readable())
00152         {
00153             message = pc.getc();
00154             if (message == 'g')
00155             {
00156                 i = 0;
00157                 while (i < 10)
00158                 {
00159                     if (pc.readable())
00160                     {
00161                         msg[i] = pc.getc();
00162                         i++;
00163                     }
00164                 }
00165                 sprintf(m, "%.4s", msg);
00166                 vTime[0] = atoi(m);
00167                 //lcd.printf("%d\n", vTime[0]);
00168                 //lcd.printf("%s\n", m);
00169 
00170                 sprintf(m, "%.3s", msg + 4);
00171                 vTime[1] = atoi(m);
00172 
00173                 //lcd.printf("%d\n", vTime[1]);
00174                 //lcd.printf("%s\n", m);
00175                 sprintf(m, "%.3s", msg + 7);
00176                 vTime[2] = atoi(m);
00177 
00178                 //lcd.printf("%d\n", vTime[2]);
00179                 //lcd.printf("%s\n", m);
00180                 t_enabled = true;
00181                 osSignalWait(0x7, osWaitForever);
00182                 pc.putc('j');
00183             }
00184             if (message == 'a')
00185             {
00186                 valve1 = 1; led1 = 1;
00187             }
00188             if (message == 'b')
00189             {
00190                 valve1 = 0; led1 = 0;
00191             }
00192             if (message == 'c')
00193             {
00194                 valve2 = 1; led2 = 1;
00195             }
00196             if (message == 'd')
00197             {
00198                 valve2 = 0; led2 = 0;
00199             }
00200             if (message == 'e')
00201             {
00202                 valve3 = 1; led3 = 1;
00203             }
00204             if (message == 'f')
00205             {
00206                 valve3 = 0; led3 = 0;
00207             }
00208         }
00209     }
00210 }