Jolyon Hill / ColourSensor

Dependencies:   MCP23S17 PCF8574 TextLCD eeprom mbed-dev

Revision:
4:dce5fc58abe9
Parent:
3:b8218b61b0e2
Child:
5:dc77c5967412
--- a/main.cpp	Tue Aug 16 10:21:19 2016 +0000
+++ b/main.cpp	Tue Aug 16 15:00:22 2016 +0000
@@ -113,22 +113,23 @@
 //The system looks up the type of LED that is being detected for Each sensor and will fill in the result table & update the associated Output list
 //outputs start at 0 torough to 15
 
-char Config[32]={   RGB,    0,  //sensor 0 , uses 3 outputs  - 0,1,2
-                    NOTUSED,3,  //sensor 1
-                    NOTUSED,4,  //sensor 2
-                    NOTUSED,5,  //sensor 3
-                    NOTUSED,6,  //sensor 4                    
-                    NOTUSED,7,  //sensor 5
-                    NOTUSED,8,  //sensor 6
-                    NOTUSED,9,  //sensor 7
-                    NOTUSED,10,  //sensor 8
-                    NOTUSED,11,  //sensor 9
-                    NOTUSED,12,  //sensor 10
-                    NOTUSED,13,  //sensor 11
-                    NOTUSED,14,  //sensor 12
-                    NOTUSED,15,  //sensor 13
-                    NOTUSED,15,  //sensor 14
-                    NOTUSED,15,  //sensor 15
+char Config[32]={   //RGB,    0,  //sensor 0 , uses 3 outputs  - 0,1,2
+                    GREEN_YELLOW,   0,  //sensor 0 , uses 3 outputs  - 0,1,2
+                    NOTUSED,        2,  //sensor 1
+                    NOTUSED,        3,  //sensor 2
+                    NOTUSED,        4,  //sensor 3
+                    NOTUSED,        5,  //sensor 4                    
+                    NOTUSED,        6,  //sensor 5
+                    NOTUSED,        7,  //sensor 6
+                    RGB,            8,  //sensor 7
+                    NOTUSED,        11,  //sensor 8
+                    NOTUSED,        12,  //sensor 9
+                    NOTUSED,        13,  //sensor 10
+                    NOTUSED,        14,  //sensor 11
+                    NOTUSED,        15,  //sensor 12
+                    NOTUSED,        15,  //sensor 13
+                    NOTUSED,        15,  //sensor 14
+                    NOTUSED,        15,  //sensor 15
                 };
 
 char LEDState[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //current detected LED states
@@ -291,16 +292,18 @@
     char BitA, BitB, PortA, PortB;
     
     OutputWord <<= bit;
-    BitA = OutputWord & 0xFF;
-    BitB = OutputWord >> 8;
+    OutputData |= OutputWord;
+    
+    //BitA = OutputWord & 0xFF;
+    //BitB = OutputWord >> 8;
     
-    PortA = chip.read(PORT_A);
-    PortA |=BitA;
-    chip.write(PORT_A, PortA);
+    //PortA = chip.read(PORT_A);
+    //PortA |=BitA;
+    //chip.write(PORT_A, PortA);
     
-    PortB = chip.read(PORT_B);
-    PortB |=BitB;
-    chip.write(PORT_B, PortB);   
+    //PortB = chip.read(PORT_B);
+    //PortB |=BitB;
+    //chip.write(PORT_B, PortB);   
 }
 
 void ClearOutputBit(char bit)
@@ -310,17 +313,18 @@
     
     OutputWord <<= bit;
     OutputWord = ~OutputWord;
+    OutputWord &= OutputWord;
         
-    BitA = OutputWord & 0xFF;
-    BitB = OutputWord >> 8;
+    //BitA = OutputWord & 0xFF;
+    //BitB = OutputWord >> 8;
     
-    PortA = chip.read(PORT_A);
-    PortA &=BitA;
-    chip.write(PORT_A, PortA);
+    //PortA = chip.read(PORT_A);
+    //PortA &=BitA;
+    //chip.write(PORT_A, PortA);
     
-    PortB = chip.read(PORT_B);
-    PortB &=BitB;
-    chip.write(PORT_B, PortB);   
+    //PortB = chip.read(PORT_B);
+    //PortB &=BitB;
+    //chip.write(PORT_B, PortB);   
 }
 
 void WriteOutputPort(uint16_t FullPort)
@@ -364,10 +368,8 @@
 
 char GetResults(uint8_t ThisSensor)
 {
-
     char LEDColour = ERROR;
-    
-    
+       
     if(White > WHITE_THRESHOLD) //looking at intensity somthing is on!
     {  
         switch(Config[(ThisSensor << 1)])
@@ -460,6 +462,134 @@
 }
 
 
+void UpdateOutputs(void)
+{
+    //good LED so turn on Outputs
+    switch (Config[(SensorNumber << 1)])
+    {
+        case STD_RED:
+        case STD_GREEN:                    
+        case STD_BLUE:                    
+        case STD_YELLOW: 
+        {
+            if (SensorResult == Config[(SensorNumber << 1)])
+            {
+                SetOutputBit(Config[((SensorNumber << 1)+1)]);
+            }
+            else
+            {
+                ClearOutputBit(Config[((SensorNumber << 1)+1)]);
+            }  
+        }
+        break;
+        
+        case GREEN_YELLOW:
+        {
+            if (SensorResult == YELLOW)
+            { 
+                SetOutputBit(Config[((SensorNumber << 1)+1)]); //base output
+                ClearOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
+            }
+            else 
+            {   
+                if (SensorResult == GREEN)
+                {
+                    ClearOutputBit(Config[((SensorNumber << 1)+1)]); //base output
+                    SetOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
+                }
+                else
+                {
+                    ClearOutputBit(Config[((SensorNumber << 1)+1)]); //base output
+                    ClearOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
+                }
+            }      
+        }
+        break;
+        
+        case RGB:
+        {
+            if (SensorResult == RED)
+            { 
+                SetOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
+                ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
+                ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output
+            }
+            else 
+            {   
+                if (SensorResult == GREEN)
+                {
+                    ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
+                    SetOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
+                    ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output
+                }
+                else
+                {
+                    if (SensorResult == BLUE)
+                    {
+                        ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
+                        ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
+                        SetOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output  
+                    }
+                    else  
+                    {
+                        ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
+                        ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
+                        ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output               
+                    }
+                    
+                }
+            }          
+        }
+        break;  
+        
+        default:
+        {
+            ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output  
+        }
+         break;                       
+     }   //end switch                                  
+}
+
+void ShowLeds(char WhichColour)
+{
+    RedLed = 0;
+    GreenLed = 0; 
+    BlueLed = 0;           
+    YellowLed = 0; 
+    switch (WhichColour)
+    {
+        case RED:
+        {
+            RedLed = 1;    
+        }
+        break;
+        
+         case GREEN:
+        {
+            GreenLed = 1;    
+        }
+        break;
+        
+        case BLUE:
+        {
+            BlueLed = 1;    
+        }
+        break; 
+        
+        case YELLOW:
+        {
+            YellowLed = 1;    
+        }
+        break; 
+        
+        default:
+        {
+        }
+        break;              
+    }    
+}
+
+
 
 int main()
 {
@@ -472,6 +602,7 @@
     {
         
         //WriteOutputPort(MyPort);
+        /*
         ClearOutputBit(MyPort);
         MyPort++;
         if (MyPort == 16)
@@ -479,22 +610,24 @@
             MyPort = 0;
         }
         SetOutputBit(MyPort);       
-        
+       */ 
         GetThresholds();
 
         DisplayIndex++;
-        if(DisplayIndex >= 20) {
+        if(DisplayIndex >= 20) 
+        {
             DisplayIndex = 0;
         }
 
         wait(0.1);
+        OutputData = 0;
         
 //----------------------My TCS3472--------------------
 
 
         for(SensorNumber = 0; SensorNumber < 16; SensorNumber++)
         {
-            if(Config[((SensorNumber << 1) + 1)] != NOTUSED) //check to see if the sensor is being used
+            if(Config[((SensorNumber << 1))] != NOTUSED) //check to see if the sensor is being used
             {  
                 SensorData =  GetSensorData(SensorNumber);
 
@@ -513,105 +646,18 @@
 
 
                 SensorResult = GetResults(SensorNumber);
-                
-                
-
-                //good LED so turn on Outputs
-                switch (Config[(SensorNumber << 1)])
-                {
-                    case STD_RED:
-                    case STD_GREEN:                    
-                    case STD_BLUE:                    
-                    case STD_YELLOW: 
-                    {
-                        if (SensorResult == Config[(SensorNumber << 1)])
-                        {
-                            SetOutputBit(Config[((SensorNumber << 1)+1)]);
-                        }
-                        else
-                        {
-                            ClearOutputBit(Config[((SensorNumber << 1)+1)]);
-                        }  
-                    }
-                    break;
-                    
-                    case GREEN_YELLOW:
-                    {
-                        if (SensorResult == YELLOW)
-                        { 
-                            SetOutputBit(Config[((SensorNumber << 1)+1)]); //base output
-                            ClearOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
-                        }
-                        else 
-                        {   
-                            if (SensorResult == GREEN)
-                            {
-                                ClearOutputBit(Config[((SensorNumber << 1)+1)]); //base output
-                                SetOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
-                            }
-                            else
-                            {
-                                ClearOutputBit(Config[((SensorNumber << 1)+1)]); //base output
-                                ClearOutputBit(    Config[((SensorNumber << 1)+1)] +1);//next output
-                            }
-                        }      
-                    }
-                    break;
-                    
-                    case RGB:
-                    {
-                        if (SensorResult == RED)
-                        { 
-                            SetOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
-                            ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
-                            ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output
-                        }
-                        else 
-                        {   
-                            if (SensorResult == GREEN)
-                            {
-                                ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
-                                SetOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
-                                ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output
-                            }
-                            else
-                            {
-                                if (SensorResult == BLUE)
-                                {
-                                    ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
-                                    ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
-                                    SetOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output  
-                                }
-                                else  
-                                {
-                                    ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output
-                                    ClearOutputBit(Config[((SensorNumber << 1)+1)] +1); //next output
-                                    ClearOutputBit(Config[((SensorNumber << 1)+1)] +2); //next output               
-                                }
-                                
-                            }
-                        }          
-                    }
-                    break;  
-                    
-                    default:
-                    {
-                        ClearOutputBit(Config[((SensorNumber << 1)+1)]);          //base output  
-                    }
-                     break;                       
-                 }   //end switch                             
+                UpdateOutputs();
+                ShowLeds(SensorResult);    
             } //end if
         } //end for 
-                   
- 
+        WriteOutputPort(OutputData);
 
 
 
-
+/*
         //guess the colour
         if(White > WHITE_THRESHOLD) //looking at intensity somthing is on!
         { 
-        /*
             if((GreenProp <= 30) && (RedProp >=50)) 
             { //pretty sure it's Yellow
                 YellowLed = 1;
@@ -627,7 +673,6 @@
                     YellowLed = 1;
                 }
             }
-            */
             
             //------------------------CHECK red-----------------------------------------
             if((RedProp - GreenProp  > 30) && (RedProp - BlueProp  > 30))
@@ -689,7 +734,7 @@
         }    
             
                            
- 
+ */
  
   /*
   //-------------------------------------------------------------------------------------------------------------------