float temp;
int buzzerPin = 8; // change led with buzzer
bool lockFlag = false;
bool lockFlag2425 = false;
bool lockFlag2627 = false;
bool lockFlag2829 = false;
byte buzzerCounter = 0;
int duration = 500;
//machine state
byte mState = 0;
unsigned long buzzerMillis;
unsigned long printMillis;
//***************************************************************************************
void setup()
{
pinMode(buzzerPin, OUTPUT); //Initialise the buzzerPin as an output
pinMode(A0, INPUT);
Serial.begin (9600) ; // put your setup code here, to run once:
} //END of setup()
//***************************************************************************************
void loop()
{
//***********************************
if (millis() - printMillis >= 1000)
{
printMillis = millis();
temp = analogRead (A0); //read the value from the sensor
temp = temp * 0.048828125;
if (temp < 24 || temp > 29)
{
//allow all range checking
lockFlag2425 = false;
lockFlag2627 = false;
lockFlag2829 = false;
}
Serial.print( "TEMPERATURE: "); //prints temperature in serial monitor
Serial.print(temp);
Serial.print("*C");
Serial.println();
}
//***********************************
if (lockFlag == false && lockFlag2425 == false && temp >= 24.0 && temp <= 25.0)
{
mState = 1;
//set disable flags
lockFlag = true;
//we only want to beep once per range entry point
lockFlag2425 = true;
lockFlag2627 = false;
lockFlag2829 = false;
tone(buzzerPin, 1500, duration);
buzzerMillis = millis();
}
//***********************************
else if (lockFlag == false && lockFlag2627 == false && temp >= 26.0 && temp <= 27.0)
{
mState = 2;
//set disable flags
lockFlag = true;
lockFlag2425 = false;
//we only want to beep once per range entry point
lockFlag2627 = true;
lockFlag2829 = false;
buzzerCounter = 0;
tone(buzzerPin, 1500, duration);
buzzerMillis = millis();
}
//***********************************
else if (lockFlag == false && lockFlag2829 == false && temp >= 28.0 && temp <= 29.0)
{
mState = 3;
//set disable flags
lockFlag = true;
lockFlag2425 = false;
lockFlag2627 = false;
//we only want to beep once per range entry point
lockFlag2829 = true;
buzzerCounter = 0;
tone(buzzerPin, 1500, duration);
buzzerMillis = millis();
}
//***********************************
switch (mState)
{
//*********************
case 0:
break;
//*********************
case 1:
if (millis() - buzzerMillis >= 1250)
{
//allow range checking once again
lockFlag = false;
mState = 0;
}
break;
//*********************
case 2:
if (millis() - buzzerMillis >= 1250)
{
buzzerMillis = millis();
buzzerCounter++;
if (buzzerCounter >= 2)
{
//allow range checking once again
lockFlag = false;
mState = 0;
break;
}
tone(buzzerPin, 1500, duration);
}
break;
//*********************
case 3:
if (millis() - buzzerMillis >= 1250)
{
buzzerMillis = millis();
buzzerCounter++;
if (buzzerCounter >= 3)
{
//allow range checking once again
lockFlag = false;
mState = 0;
break;
}
tone(buzzerPin, 1500, duration);
}
break;
} //END of switch/case
} //END of loop()