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.
Dependencies: MCP23S17 PCF8574 TextLCD eeprom mbed-dev
Diff: main.cpp
- 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 @@
}
-
+ */
/*
//-------------------------------------------------------------------------------------------------------------------