Files
Arduino/Projects/ST_Two_Small_Clock/ST2_Main/ST2_Main.ino

223 lines
5.5 KiB
C++

//*******************************************************************************************************************
// Main Loop
//*******************************************************************************************************************
void loop()
{
// Test for Sleep ------------------------------------------------*
currentMillis = millis();
OptionModeFlag = false;
if(((currentMillis - SleepTimer) > SleepLimit) && SleepEnable)
{
if(STATE= 1) // New for ST Desk Clock - goto Time vs Sleep
{
SUBSTATE = 1;
blinkON = true;
blinkFlag = false;
blinkMin = false;
blinkHour = false;
}else
{
STATE= 1; // was STATE= 99;
SUBSTATE = 0;
}
SleepTimer = millis();
}
// Test for Mode Button Press ------------------------------------*
bval = !digitalRead(MODEBUTTON);
if(bval)
{
if(ALARMON)
{
CheckAlarm();
}
if(ALARM1FLAG)
{
ALARM1FLAG = false;
ALARMON = false;
EnableAlarm1(false);
STATE = 90;
JustWokeUpFlag = false;
}
else
{
if(JustWokeUpFlag)
{
JustWokeUpFlag = false;
JustWokeUpFlag2 = true; // Used to supress "Time" text from showing when waking up.
}
else
{
NextStateRequest = true;
}
// SUBSTATE = 99;
while(bval)
{
bval = !digitalRead(SETBUTTON);
if(bval)
{
OptionModeFlag = true;
NextStateRequest = false;
NextSUBStateRequest = false;
displayString("SPEC");
delay(300);
}
bval = !digitalRead(MODEBUTTON);
}
delay(100);
SleepTimer = millis();
}
}
// Test for SET Button Press ------------------------------------*
bval = !digitalRead(SETBUTTON);
if(bval && !OptionModeFlag)
{
NextSUBStateRequest = true;
while(bval)
{
bval = !digitalRead(MODEBUTTON);
if(bval)
{
OptionModeFlag = true;
NextStateRequest = false;
NextSUBStateRequest = false;
displayString("SPEC");
delay(300);
}
bval = !digitalRead(SETBUTTON);
}
delay(100);
SleepTimer = millis();
}
// Running Blink counter ------------------------------------*
if(blinkFlag)
{
blinkCounter = blinkCounter +1;
if(blinkCounter >blinkTime) // was 150
{
blinkON = !blinkON;
blinkCounter = 0;
}
}
else
{
blinkON = true; // Not blinking, just leave the LEDs lit
}
//*******************************************************************************************************************
// Main Loop - State Machine
//*******************************************************************************************************************
switch (STATE)
{
case 0: // Set-Up
STATE = 1;
break;
case 1: // Display Time
DisplayTimeSub();
break;
case 2: // Set Time
setAlarmSub();
break;
case 3: // Config Alarm
setTimeSub();
break;
case 4: // Stop Watch
StopWatch();
break;
case 5: // Serial Display
DisplaySerialData();
break;
case 6: // Graphic Demo
graphican();
break;
// ---------------------------------------------------------------
case 90: // Alarm Triggered
blinkFlag = true;
displayString("Beep");
if(blinkON)
{
pinMode(SETBUTTON, OUTPUT);
tone(SETBUTTON,4000) ;
delay(100);
noTone(SETBUTTON);
digitalWrite(SETBUTTON, HIGH);
}
#if ARDUINO >= 101
pinMode(SETBUTTON, INPUT_PULLUP);
// digitalWrite(SETBUTTON, HIGH);
#else
// digitalWrite(SETBUTTON, HIGH);
pinMode(SETBUTTON, INPUT);
#endif
delay(250);
// bval = !digitalRead(SETBUTTON);
if(NextSUBStateRequest | NextStateRequest)
{
STATE = 0;
SUBSTATE = 0;
// NextStateFlag = true;
NextStateRequest = false;
NextSUBStateRequest = false;
blinkFlag = false;
}
break;
// ---------------------------------------------------------------
case 99: // Sleep
displayString("Nite");
delay(500);
clearmatrix();
GoToSleep();
SleepTimer = millis();
STATE = 0;
SUBSTATE = 0;
break;
// ---------------------------------------------------------------
}
}
//*******************************************************************************************************************
// End of Main Loop
//*******************************************************************************************************************