You'll probably want to use a a state machine and grab samples from your LDR every 20ms or so.
Something like this:
Code:
const int BLACK = 0;
const int WHITE = 0;
int main()
{
Timer t;
LDR ldr;
t.start();
int state = WHITE;
while (true)
{
int value = ldr.getValue();
double blackStart = 0.0;
switch (state)
{
case WHITE:
if (value >= 120 && value <= 150)
{
blackStart = t.Get();
state = BLACK;
}
break;
case BLACK:
{
if (value >= 600 && value <= 620)
{
double timeDiff = t.Get() - blackStart;
if (timeDiff >= 12.0 && timeDiff <= 12.6)
{
// do something
}
else if (timeDiff > 12.6)
{
// do something else
}
state = WHITE;
}
}
}
// sleep 20ms
// This is C++11, not sure what the wpilib sleep API is.
std::this_thread::sleep_for(std::chrono::milliseconds(20));
}
}
Only problem is if your screen flashes white in < 20ms, you might not detect the change. You can try to offset that by reducing the thread's sleep time, or by getting rid of it completely, but then your program will peg the CPU.