Mearm colorsorting with web application

Dependencies:   TCS3200

Committer:
pierre11
Date:
Tue Jan 30 10:53:08 2018 +0000
Revision:
7:3b1ce80e424c
Parent:
6:60ab0d214512
MeARM +TCS3200

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pierre11 5:36f1e4e1a427 1 //#if !FEATURE_LWIP
pierre11 5:36f1e4e1a427 2 // #error [NOT_SUPPORTED] LWIP not supported for this target
pierre11 5:36f1e4e1a427 3 //#endif
group-ST 0:6e8275981824 4
group-ST 0:6e8275981824 5 #include "mbed.h"
group-ST 0:6e8275981824 6 #include "EthernetInterface.h"
group-ST 0:6e8275981824 7 #include "TCPServer.h"
group-ST 0:6e8275981824 8 #include "TCPSocket.h"
pierre11 5:36f1e4e1a427 9 #include "Servo.h"
pierre11 7:3b1ce80e424c 10 #include "TCS3200.h"
pierre11 7:3b1ce80e424c 11
pierre11 7:3b1ce80e424c 12 TCS3200 color(PF_6, PF_7, PF_8, PF_9, PA_0); //Create a TCS3200 object
pierre11 7:3b1ce80e424c 13 // S0 S1 S2 S3 OUT
pierre11 7:3b1ce80e424c 14
pierre11 7:3b1ce80e424c 15 uint8_t httpr1[1024]={200,200};
pierre11 5:36f1e4e1a427 16 uint8_t httpr[1024]={200,200};
pierre11 7:3b1ce80e424c 17 int colour();
group-ST 0:6e8275981824 18
pierre11 7:3b1ce80e424c 19 Servo Servo1(PD_15);
pierre11 7:3b1ce80e424c 20 Servo Servo2(PD_12);
pierre11 7:3b1ce80e424c 21 Servo Servo3(PD_13);
pierre11 7:3b1ce80e424c 22 Servo Servo4(PD_14);
pierre11 5:36f1e4e1a427 23
group-ST 0:6e8275981824 24
pierre11 7:3b1ce80e424c 25 int pos1 =0,pos2=0,pos4=0,pos3=0;
pierre11 7:3b1ce80e424c 26 DigitalOut myled1(LED1);
pierre11 7:3b1ce80e424c 27 DigitalOut myled2(LED2);
pierre11 7:3b1ce80e424c 28 DigitalOut myled3(LED3);
pierre11 7:3b1ce80e424c 29
group-ST 0:6e8275981824 30 int main()
group-ST 0:6e8275981824 31 {
pierre11 7:3b1ce80e424c 32
pierre11 5:36f1e4e1a427 33
pierre11 7:3b1ce80e424c 34 Servo1.Enable(0,20000);
pierre11 7:3b1ce80e424c 35 Servo2.Enable(0,20000);
pierre11 7:3b1ce80e424c 36 Servo3.Enable(0,20000);
pierre11 7:3b1ce80e424c 37 Servo4.Enable(0,20000);
pierre11 7:3b1ce80e424c 38 pos3=2500;
pierre11 7:3b1ce80e424c 39 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 40 wait_ms(10);
pierre11 7:3b1ce80e424c 41 pos1=950;
pierre11 7:3b1ce80e424c 42 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 43 wait_ms(10);
pierre11 7:3b1ce80e424c 44 pos2=600;
pierre11 7:3b1ce80e424c 45 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 46 wait_ms(10);
pierre11 7:3b1ce80e424c 47 pos4=600;
pierre11 7:3b1ce80e424c 48 Servo4.SetPosition(pos4);
pierre11 7:3b1ce80e424c 49 wait_ms(10);
pierre11 5:36f1e4e1a427 50
pierre11 7:3b1ce80e424c 51 int pos,i=0,a=0,a1=0,x=0;
pierre11 7:3b1ce80e424c 52 printf("Pierre Program\n");
group-ST 0:6e8275981824 53 EthernetInterface eth;
group-ST 0:6e8275981824 54 eth.connect();
group-ST 0:6e8275981824 55 printf("The target IP address is '%s'\n", eth.get_ip_address());
group-ST 0:6e8275981824 56 TCPServer srv;
group-ST 0:6e8275981824 57 TCPSocket clt_sock;
adustm 1:ec61ea9f67de 58 SocketAddress clt_addr;
group-ST 0:6e8275981824 59 /* Open the server on ethernet stack */
group-ST 0:6e8275981824 60 srv.open(&eth);
group-ST 0:6e8275981824 61 /* Bind the HTTP port (TCP 80) to the server */
pierre11 5:36f1e4e1a427 62 //srv.bind(eth.get_ip_address(), 80);
pierre11 5:36f1e4e1a427 63 srv.bind(eth.get_ip_address(), 5001);
pierre11 5:36f1e4e1a427 64 // srv1.bind("10.101.1.130",5001);
group-ST 0:6e8275981824 65
group-ST 0:6e8275981824 66 /* Can handle 5 simultaneous connections */
group-ST 0:6e8275981824 67 srv.listen(5);
pierre11 5:36f1e4e1a427 68
pierre11 3:f5e5af908b55 69
group-ST 0:6e8275981824 70 while (true) {
pierre11 3:f5e5af908b55 71
pierre11 5:36f1e4e1a427 72 //==========================
pierre11 7:3b1ce80e424c 73
pierre11 7:3b1ce80e424c 74
pierre11 5:36f1e4e1a427 75 srv.accept(&clt_sock, &clt_addr);
pierre11 5:36f1e4e1a427 76 printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
pierre11 5:36f1e4e1a427 77 a = clt_sock.send(httpr, strlen((char *)httpr));
pierre11 5:36f1e4e1a427 78 while(true)
pierre11 5:36f1e4e1a427 79 {
pierre11 5:36f1e4e1a427 80 a1 = clt_sock.recv(httpr1, strlen((char *)httpr1));
pierre11 5:36f1e4e1a427 81 //printf("accept Xbyte %d\n",a1);
pierre11 5:36f1e4e1a427 82 if (a1 <= 0)
pierre11 5:36f1e4e1a427 83 break;
pierre11 5:36f1e4e1a427 84 //httpr1[a1] = '\0';
pierre11 5:36f1e4e1a427 85 printf("Received %d chars from server:\n%s\n", a1,httpr1);
pierre11 5:36f1e4e1a427 86 }
pierre11 5:36f1e4e1a427 87 clt_sock.close();
pierre11 5:36f1e4e1a427 88 printf("accept voir %d\n",httpr1[0]);
pierre11 7:3b1ce80e424c 89
pierre11 7:3b1ce80e424c 90 switch(httpr1[0])
pierre11 7:3b1ce80e424c 91 {
pierre11 7:3b1ce80e424c 92 case 49:
pierre11 7:3b1ce80e424c 93 //===================
pierre11 7:3b1ce80e424c 94
pierre11 7:3b1ce80e424c 95 for ( pos2 = 600; pos2 <= 2000; pos2 += 25)
pierre11 7:3b1ce80e424c 96 {
pierre11 7:3b1ce80e424c 97 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 98 wait_ms(10);
pierre11 7:3b1ce80e424c 99 }
pierre11 7:3b1ce80e424c 100 wait_ms(1000);
pierre11 7:3b1ce80e424c 101
pierre11 7:3b1ce80e424c 102 for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25)
pierre11 7:3b1ce80e424c 103 {
pierre11 7:3b1ce80e424c 104 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 105 wait_ms(10);
pierre11 7:3b1ce80e424c 106 }
pierre11 7:3b1ce80e424c 107 wait_ms(1000);
pierre11 7:3b1ce80e424c 108
pierre11 7:3b1ce80e424c 109 for ( pos1 = 950; pos1 <= 1650; pos1 += 25)
pierre11 7:3b1ce80e424c 110 {
pierre11 7:3b1ce80e424c 111 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 112 wait_ms(10);
pierre11 7:3b1ce80e424c 113 }
pierre11 7:3b1ce80e424c 114
pierre11 7:3b1ce80e424c 115 wait_ms(1000);
pierre11 7:3b1ce80e424c 116 for ( pos4 = 600; pos4 <= 2000; pos4 += 25)
pierre11 7:3b1ce80e424c 117 {
pierre11 7:3b1ce80e424c 118 Servo4.SetPosition(pos4);
pierre11 7:3b1ce80e424c 119 wait_ms(10);
pierre11 7:3b1ce80e424c 120 if(pos4==2000)
pierre11 7:3b1ce80e424c 121 {
pierre11 7:3b1ce80e424c 122 pos1=950;
pierre11 7:3b1ce80e424c 123 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 124 wait_ms(1000);
pierre11 7:3b1ce80e424c 125 pos3=2500;
pierre11 7:3b1ce80e424c 126 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 127 wait_ms(1000);
pierre11 7:3b1ce80e424c 128
pierre11 7:3b1ce80e424c 129 }
pierre11 7:3b1ce80e424c 130 }
pierre11 7:3b1ce80e424c 131
pierre11 7:3b1ce80e424c 132 for ( pos2 = 2000; pos2 <= 2600; pos2 += 25)
pierre11 7:3b1ce80e424c 133 {
pierre11 7:3b1ce80e424c 134 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 135 wait_ms(10);
pierre11 7:3b1ce80e424c 136 }
pierre11 7:3b1ce80e424c 137 wait_ms(1000);
pierre11 7:3b1ce80e424c 138
pierre11 7:3b1ce80e424c 139
pierre11 7:3b1ce80e424c 140 for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25)
pierre11 7:3b1ce80e424c 141 {
pierre11 7:3b1ce80e424c 142 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 143 wait_ms(10);
pierre11 7:3b1ce80e424c 144 }
pierre11 7:3b1ce80e424c 145 wait_ms(1000);
pierre11 7:3b1ce80e424c 146
pierre11 7:3b1ce80e424c 147 for ( pos1 = 950; pos1 <= 1650; pos1 += 25)
pierre11 7:3b1ce80e424c 148 {
pierre11 7:3b1ce80e424c 149 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 150 wait_ms(10);
pierre11 7:3b1ce80e424c 151 }
pierre11 7:3b1ce80e424c 152
pierre11 7:3b1ce80e424c 153 // ==sensor
pierre11 7:3b1ce80e424c 154 if(colour()== 1)
pierre11 7:3b1ce80e424c 155 {
pierre11 7:3b1ce80e424c 156 printf("RED\n");
pierre11 7:3b1ce80e424c 157 myled1 = 0;
pierre11 7:3b1ce80e424c 158 myled2 = 0;
pierre11 7:3b1ce80e424c 159 myled3 = 1;
pierre11 7:3b1ce80e424c 160 pos2=600;
pierre11 7:3b1ce80e424c 161 strcpy((char *)httpr, (char *)"R");
pierre11 7:3b1ce80e424c 162
pierre11 7:3b1ce80e424c 163 }
pierre11 7:3b1ce80e424c 164 else
pierre11 7:3b1ce80e424c 165 {
pierre11 7:3b1ce80e424c 166 if(colour() == 2)
pierre11 7:3b1ce80e424c 167 {
pierre11 7:3b1ce80e424c 168 printf("GREEN\n");
pierre11 7:3b1ce80e424c 169 myled1 = 1;
pierre11 7:3b1ce80e424c 170 myled2 = 0;
pierre11 7:3b1ce80e424c 171 myled3 = 0;
pierre11 7:3b1ce80e424c 172 pos2=900;
pierre11 7:3b1ce80e424c 173 strcpy((char *)httpr, (char *)"G");
pierre11 7:3b1ce80e424c 174 }
pierre11 7:3b1ce80e424c 175 if(colour() == 3)
pierre11 7:3b1ce80e424c 176 {
pierre11 7:3b1ce80e424c 177 printf("BLUE\n");
pierre11 7:3b1ce80e424c 178 myled1 = 0;
pierre11 7:3b1ce80e424c 179 myled2 = 1;
pierre11 7:3b1ce80e424c 180 myled3 = 0;
pierre11 7:3b1ce80e424c 181
pierre11 7:3b1ce80e424c 182 pos2=1010;
pierre11 7:3b1ce80e424c 183 strcpy((char *)httpr, (char *)"B");
pierre11 7:3b1ce80e424c 184
pierre11 7:3b1ce80e424c 185
pierre11 7:3b1ce80e424c 186 }
pierre11 7:3b1ce80e424c 187 }
pierre11 7:3b1ce80e424c 188
pierre11 7:3b1ce80e424c 189 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 190 wait_ms(1000);
pierre11 7:3b1ce80e424c 191 //======
pierre11 7:3b1ce80e424c 192
pierre11 7:3b1ce80e424c 193
pierre11 7:3b1ce80e424c 194 pos1=950;
pierre11 7:3b1ce80e424c 195 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 196 wait_ms(1000);
pierre11 7:3b1ce80e424c 197 pos3=2500;
pierre11 7:3b1ce80e424c 198 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 199 wait_ms(1000);
pierre11 7:3b1ce80e424c 200 pos2=600;
pierre11 7:3b1ce80e424c 201 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 202 wait_ms(1000);
pierre11 7:3b1ce80e424c 203
pierre11 7:3b1ce80e424c 204
pierre11 7:3b1ce80e424c 205 for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25)
pierre11 7:3b1ce80e424c 206 {
pierre11 7:3b1ce80e424c 207 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 208 wait_ms(10);
pierre11 7:3b1ce80e424c 209 }
pierre11 7:3b1ce80e424c 210 wait_ms(1000);
pierre11 7:3b1ce80e424c 211
pierre11 7:3b1ce80e424c 212 for ( pos1 = 950; pos1 <= 1650; pos1 += 25)
pierre11 7:3b1ce80e424c 213 {
pierre11 7:3b1ce80e424c 214 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 215 wait_ms(10);
pierre11 7:3b1ce80e424c 216 if(pos1==2050)
pierre11 7:3b1ce80e424c 217 {
pierre11 7:3b1ce80e424c 218 pos4=1400;
pierre11 7:3b1ce80e424c 219 Servo4.SetPosition(pos4);
pierre11 7:3b1ce80e424c 220 wait_ms(10);
pierre11 7:3b1ce80e424c 221 }
pierre11 7:3b1ce80e424c 222 }
pierre11 7:3b1ce80e424c 223 pos1 =950;
pierre11 7:3b1ce80e424c 224 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 225 wait_ms(1000);
pierre11 7:3b1ce80e424c 226
pierre11 7:3b1ce80e424c 227 pos3=2500;
pierre11 7:3b1ce80e424c 228 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 229 wait_ms(1000);
pierre11 7:3b1ce80e424c 230
pierre11 7:3b1ce80e424c 231 //===================
pierre11 7:3b1ce80e424c 232 break;
pierre11 7:3b1ce80e424c 233 case 50:
pierre11 7:3b1ce80e424c 234 //===================
pierre11 7:3b1ce80e424c 235 // move_3();
pierre11 7:3b1ce80e424c 236 pos3=2500;
pierre11 7:3b1ce80e424c 237 Servo3.SetPosition(pos3);
pierre11 7:3b1ce80e424c 238 wait_ms(10);
pierre11 7:3b1ce80e424c 239 pos1=950;
pierre11 7:3b1ce80e424c 240 Servo1.SetPosition(pos1);
pierre11 7:3b1ce80e424c 241 wait_ms(10);
pierre11 7:3b1ce80e424c 242 pos2=600;
pierre11 7:3b1ce80e424c 243 Servo2.SetPosition(pos2);
pierre11 7:3b1ce80e424c 244 wait_ms(10);
pierre11 7:3b1ce80e424c 245 pos4=600;
pierre11 7:3b1ce80e424c 246 Servo4.SetPosition(pos4);
pierre11 7:3b1ce80e424c 247 wait_ms(10);
pierre11 7:3b1ce80e424c 248 strcpy((char *)httpr, (char *)"M2");
pierre11 7:3b1ce80e424c 249 //===================
pierre11 7:3b1ce80e424c 250 break;
pierre11 7:3b1ce80e424c 251 case 51:
pierre11 7:3b1ce80e424c 252 //=====================
pierre11 7:3b1ce80e424c 253 // move_1();
pierre11 7:3b1ce80e424c 254 strcpy((char *)httpr, (char *)"M3");
pierre11 7:3b1ce80e424c 255 //=====================
pierre11 7:3b1ce80e424c 256 break;
pierre11 7:3b1ce80e424c 257 case 52:
pierre11 7:3b1ce80e424c 258 //=========================
pierre11 7:3b1ce80e424c 259 // move_4();
pierre11 7:3b1ce80e424c 260 strcpy((char *)httpr, (char *)"M4");
pierre11 7:3b1ce80e424c 261 //=========================
pierre11 7:3b1ce80e424c 262 break;
pierre11 7:3b1ce80e424c 263 }
pierre11 5:36f1e4e1a427 264 }
pierre11 5:36f1e4e1a427 265
pierre11 7:3b1ce80e424c 266 }
pierre11 7:3b1ce80e424c 267 int colour()
pierre11 7:3b1ce80e424c 268 {
pierre11 7:3b1ce80e424c 269 color.SetMode(TCS3200::SCALE_100);
pierre11 7:3b1ce80e424c 270 long red, green, blue, clear;
pierre11 7:3b1ce80e424c 271 int r = 0,g = 0, b =0 ;
pierre11 7:3b1ce80e424c 272 for(int c=0 ; c < 10; c++)
pierre11 7:3b1ce80e424c 273 {
pierre11 7:3b1ce80e424c 274
pierre11 7:3b1ce80e424c 275 red = color.ReadRed();
pierre11 7:3b1ce80e424c 276 green = color.ReadGreen();
pierre11 7:3b1ce80e424c 277 blue = color.ReadBlue();
pierre11 7:3b1ce80e424c 278 clear = color.ReadClear();
pierre11 7:3b1ce80e424c 279
pierre11 7:3b1ce80e424c 280 if((red < blue) && (red < green))
pierre11 7:3b1ce80e424c 281 {
pierre11 7:3b1ce80e424c 282 r++; // red
pierre11 7:3b1ce80e424c 283 }
pierre11 7:3b1ce80e424c 284 if((green < blue) && (green < red))
pierre11 7:3b1ce80e424c 285 {
pierre11 7:3b1ce80e424c 286 g++;//green
pierre11 7:3b1ce80e424c 287 }
pierre11 7:3b1ce80e424c 288 if(blue < red && blue < green)
pierre11 7:3b1ce80e424c 289 {
pierre11 7:3b1ce80e424c 290 b++;//blue
pierre11 7:3b1ce80e424c 291 }
pierre11 7:3b1ce80e424c 292
pierre11 7:3b1ce80e424c 293 }
pierre11 7:3b1ce80e424c 294
pierre11 7:3b1ce80e424c 295 if((r > b) && (r > g))
pierre11 7:3b1ce80e424c 296 {
pierre11 7:3b1ce80e424c 297 return 1; //red
pierre11 7:3b1ce80e424c 298 }
pierre11 7:3b1ce80e424c 299 else
pierre11 7:3b1ce80e424c 300 {
pierre11 7:3b1ce80e424c 301 if(g > b && g > r)
pierre11 7:3b1ce80e424c 302 {
pierre11 7:3b1ce80e424c 303 return 2; //green
pierre11 7:3b1ce80e424c 304 }
pierre11 7:3b1ce80e424c 305 else
pierre11 7:3b1ce80e424c 306 {
pierre11 7:3b1ce80e424c 307 if(b > g && b > r)
pierre11 7:3b1ce80e424c 308 {
pierre11 7:3b1ce80e424c 309 return 3;
pierre11 7:3b1ce80e424c 310 }
pierre11 7:3b1ce80e424c 311 else
pierre11 7:3b1ce80e424c 312 {
pierre11 7:3b1ce80e424c 313 return 4;
pierre11 7:3b1ce80e424c 314 }
pierre11 7:3b1ce80e424c 315 //blue
pierre11 7:3b1ce80e424c 316
pierre11 7:3b1ce80e424c 317 }
pierre11 7:3b1ce80e424c 318
pierre11 7:3b1ce80e424c 319
pierre11 7:3b1ce80e424c 320 }
pierre11 7:3b1ce80e424c 321
pierre11 7:3b1ce80e424c 322 }