Mearm colorsorting with web application

Dependencies:   TCS3200

main.cpp

Committer:
pierre11
Date:
2018-01-30
Revision:
7:3b1ce80e424c
Parent:
6:60ab0d214512

File content as of revision 7:3b1ce80e424c:

//#if !FEATURE_LWIP
 //   #error [NOT_SUPPORTED] LWIP not supported for this target
//#endif

#include "mbed.h"
#include "EthernetInterface.h"
#include "TCPServer.h"
#include "TCPSocket.h"
#include "Servo.h"
#include "TCS3200.h"

TCS3200 color(PF_6, PF_7, PF_8, PF_9, PA_0);  //Create a TCS3200 object 
 //            S0    S1    S2     S3     OUT

uint8_t httpr1[1024]={200,200};
uint8_t httpr[1024]={200,200};
int colour();

Servo Servo1(PD_15);
Servo Servo2(PD_12);
Servo Servo3(PD_13);
Servo Servo4(PD_14);
 

int pos1 =0,pos2=0,pos4=0,pos3=0;    
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);  
               
int main()
{

 
  Servo1.Enable(0,20000);
  Servo2.Enable(0,20000);
  Servo3.Enable(0,20000);
  Servo4.Enable(0,20000);
  pos3=2500;
  Servo3.SetPosition(pos3); 
  wait_ms(10);
  pos1=950;
  Servo1.SetPosition(pos1); 
  wait_ms(10);
  pos2=600;
  Servo2.SetPosition(pos2);
  wait_ms(10);
  pos4=600;
  Servo4.SetPosition(pos4);
  wait_ms(10); 
    
    int pos,i=0,a=0,a1=0,x=0;
    printf("Pierre Program\n");
    EthernetInterface eth;
    eth.connect();
    printf("The target IP address is '%s'\n", eth.get_ip_address());
    TCPServer srv;
    TCPSocket clt_sock;
    SocketAddress clt_addr;
    /* Open the server on ethernet stack */
    srv.open(&eth);
    /* Bind the HTTP port (TCP 80) to the server */
    //srv.bind(eth.get_ip_address(), 80);
    srv.bind(eth.get_ip_address(), 5001);
  //  srv1.bind("10.101.1.130",5001);
    
    /* Can handle 5 simultaneous connections */
    srv.listen(5);
    
   
    while (true) {
        
        //==========================
    
          
          srv.accept(&clt_sock, &clt_addr);
          printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
          a = clt_sock.send(httpr, strlen((char *)httpr));
          while(true)
          {
              a1 = clt_sock.recv(httpr1, strlen((char *)httpr1)); 
              //printf("accept Xbyte %d\n",a1);
              if (a1 <= 0)
                break;
              //httpr1[a1] = '\0';
               printf("Received %d chars from server:\n%s\n", a1,httpr1);
          }
           clt_sock.close();
           printf("accept voir %d\n",httpr1[0]);
           
           switch(httpr1[0])
           {
            case 49:
            //===================
          
            for ( pos2 = 600; pos2 <= 2000; pos2 += 25) 
            {
            Servo2.SetPosition(pos2);  
            wait_ms(10);
            }
            wait_ms(1000);
      
           for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25) 
           {
           Servo3.SetPosition(pos3);  
           wait_ms(10);
           }
           wait_ms(1000);
      
          for ( pos1 = 950; pos1 <= 1650; pos1 += 25) 
          {
           Servo1.SetPosition(pos1);  
           wait_ms(10);
          }
      
          wait_ms(1000);
          for ( pos4 = 600; pos4 <= 2000; pos4 += 25) 
          {
          Servo4.SetPosition(pos4);  
          wait_ms(10);
              if(pos4==2000)
              {
                  pos1=950;
                  Servo1.SetPosition(pos1); 
                  wait_ms(1000);
                  pos3=2500;
                  Servo3.SetPosition(pos3);
                  wait_ms(1000);
                  
              }
          }
      
         for ( pos2 = 2000; pos2 <= 2600; pos2 += 25) 
        {
          Servo2.SetPosition(pos2);  
          wait_ms(10);
        }
        wait_ms(1000);
      
      
        for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25) 
        {
          Servo3.SetPosition(pos3);  
          wait_ms(10);
        }
        wait_ms(1000);
      
        for ( pos1 = 950; pos1 <= 1650; pos1 += 25) 
        {
          Servo1.SetPosition(pos1);  
          wait_ms(10);
        }
       
        // ==sensor
        if(colour()== 1)
       {
          printf("RED\n"); 
               myled1 = 0; 
               myled2 = 0;
               myled3 = 1;
               pos2=600;
               strcpy((char *)httpr, (char *)"R");
                
       }
       else
       {
           if(colour() == 2)
           {
              printf("GREEN\n"); 
               myled1 = 1; 
               myled2 = 0;
               myled3 = 0;
               pos2=900;
               strcpy((char *)httpr, (char *)"G");
           }
         if(colour() == 3)
           {
              printf("BLUE\n");
               myled1 = 0; 
               myled2 = 1;
               myled3 = 0;
              
             pos2=1010;
             strcpy((char *)httpr, (char *)"B");
                      
               
           }   
       } 
       
        Servo2.SetPosition(pos2);
        wait_ms(1000);  
        //======
      
      
                  pos1=950;
                  Servo1.SetPosition(pos1); 
                  wait_ms(1000);
                  pos3=2500;
                  Servo3.SetPosition(pos3);
                  wait_ms(1000);
                   pos2=600;
                  Servo2.SetPosition(pos2);
                  wait_ms(1000);
                  
      
       for ( pos3 = 2500; pos3 >= 1650; pos3 -= 25) 
      {
          Servo3.SetPosition(pos3);  
          wait_ms(10);
      }  
      wait_ms(1000);
      
        for ( pos1 = 950; pos1 <= 1650; pos1 += 25) 
      {
          Servo1.SetPosition(pos1);  
          wait_ms(10);
            if(pos1==2050)
              {
                  pos4=1400;
                  Servo4.SetPosition(pos4);
                  wait_ms(10);
              }
      }
      pos1 =950;
      Servo1.SetPosition(pos1);  
      wait_ms(1000);
      
      pos3=2500;
      Servo3.SetPosition(pos3);  
      wait_ms(1000);
           
            //=================== 
            break;
            case 50: 
            //===================
              // move_3();
               pos3=2500;
                Servo3.SetPosition(pos3); 
                 wait_ms(10);
             pos1=950;
            Servo1.SetPosition(pos1); 
            wait_ms(10);
            pos2=600;
            Servo2.SetPosition(pos2);
            wait_ms(10);
            pos4=600;
            Servo4.SetPosition(pos4);
            wait_ms(10); 
              strcpy((char *)httpr, (char *)"M2");
            //===================         
            break;
            case 51: 
            //=====================
           //  move_1();
              strcpy((char *)httpr, (char *)"M3");
            //=====================
            break;
            case 52: 
            //=========================
             // move_4();
             strcpy((char *)httpr, (char *)"M4");
            //=========================
            break;
            }
          }
     
}
int colour()
{
 color.SetMode(TCS3200::SCALE_100);
 long red, green, blue, clear;
 int r = 0,g = 0, b =0 ;
 for(int c=0 ; c < 10; c++)
{
    
    red = color.ReadRed();
    green = color.ReadGreen();
    blue = color.ReadBlue();
    clear = color.ReadClear();
        
    if((red < blue) && (red < green))
    {
    r++;        // red
    }
    if((green < blue) && (green < red))
    {
             g++;//green
    }
    if(blue < red && blue < green)
    {
             b++;//blue 
    }
         
}
   
   if((r > b) && (r > g))
   {
     return 1;                  //red
   }
   else
   {
  if(g > b && g > r)
   {
     return 2;                 //green
   }
   else
   {
            if(b > g && b > r)
            {
               return 3;  
            }
            else
            {
               return 4;  
            }
                      //blue
            
   }         


   }

}