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 "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