Automatic cocktail maker
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Wed Jul 13 2022 16:05:30 by
1.7.2