You are on page 1of 6

// "silence alarm" button processing

currBtnState = digitalRead(switchPin); // start of debounce filter


delay(5);
loopLen += 5;
curr2BtnState = digitalRead(switchPin); // end of debounce filter
if (currBtnState == curr2BtnState) {
if (currBtnState != prevBtnState) {
if (currBtnState == LOW) {
alarmAck = 1;
}
}
prevBtnState = currBtnState;
}
-----------------------------------------------------------------------------

const int tempPin = 0;


const int loLedPin = 8;
const int okLedPin = 9;
const int hiLedPin = 10;
const int piezoPin = 11;
const int switchPin = 2;

const int NO_ALARM = 0;


const int LOW_TEMP = 1;
const int HIGH_TEMP = 2;
const int OUTSIDE_SPECS = 3;
int currAlarmState = NO_ALARM;
int prevAlarmState = NO_ALARM;

int analogTempRead;
float celsiusTempRead;
// PJ - Change 1: Pre declare volt here
float volt;
const int piezoPitch = 100;
int loopLen;
float avgCelsiusTempRead;

byte prevBtnState; // 1 = alarm acknowledged; 0 = alarm not acknowledged


byte currBtnState;
byte curr2BtnState;
byte alarmAck;

unsigned long iteration;

void setup() {
Serial.begin(9600);
pinMode(loLedPin, OUTPUT);
pinMode(okLedPin, OUTPUT);
pinMode(hiLedPin, OUTPUT);
pinMode(piezoPin, OUTPUT);
Serial.println("\n\nReady.");
}

void loop()
{
loopLen = 0;

iteration++;

// reading sensor and converting to volts


Serial.println("\n\n\n\n");
// analogTempRead = 0; // PJ - Change 2: This is not needed with the
next line change!
//for (int i =0; i<16; i++) // PJ - Change 3: No need to take and average
10 readings
analogTempRead = analogRead(tempPin);

// float volt = analogTempRead * (aref_voltage/10.0)/16368; // 16368 =


1024 * 16
volt = analogTempRead * (5/1024.0); // change 4: 1024.0, otherwise will
calc integer value!!
Serial.print(volt);
Serial.println(" V\n");

celsiusTempRead = ((volt-.5)*100);

//avgCelsiusTempRead = (0.1 * celsiusTempRead + 0.9 * avgCelsiusTempRead);

Serial.print("*** DEBUG MODE, iteration #"); Serial.println(iteration);

if (iteration < 5) {
avgCelsiusTempRead = 2.0;
}
if (iteration >= 5 && iteration < 10) {
avgCelsiusTempRead = 15.0;
}
if (iteration >= 10 && iteration <15) {
avgCelsiusTempRead = 500.0;
}
if (iteration >= 15 && iteration < 20) {
avgCelsiusTempRead = -4.0;
}
if (iteration >= 20 && iteration < 25) {
avgCelsiusTempRead = 15.0;
}
if (iteration >= 25) {
avgCelsiusTempRead = (0.1 * celsiusTempRead + 0.9 * avgCelsiusTempRead);
}

// debug
// celsiusTempRead = 500;

Serial.println("+=======+===========+");
Serial.print("|Instant| "); Serial.print(celsiusTempRead, 2);
Serial.println("*C\t|");
Serial.println("+-------+-----------+");
Serial.print("|Average| "); Serial.print(avgCelsiusTempRead, 2);
Serial.println("*C\t|");
Serial.println("+=======+===========+");

// "silence alarm" button processing


currBtnState = digitalRead(switchPin); // start of debounce filter
delay(5);
loopLen += 5;
curr2BtnState = digitalRead(switchPin); // end of debounce filter
if (currBtnState == curr2BtnState) {
if (currBtnState != prevBtnState) {
if (currBtnState == LOW) {
alarmAck = 1;
}
}
prevBtnState = currBtnState;
}

// returned temperature processing


if (avgCelsiusTempRead >= -30 && avgCelsiusTempRead <= 0) {
Serial.println("ALARM: LOW TEMP");
currAlarmState = LOW_TEMP;
if (currAlarmState != prevAlarmState) {
alarmAck = 0;
}
digitalWrite(loLedPin, HIGH);
digitalWrite(okLedPin, LOW);
digitalWrite(hiLedPin, LOW);
if (alarmAck == 0) {
analogWrite(piezoPin, piezoPitch);
delay(100);
analogWrite(piezoPin, 0);
delay(50);
analogWrite(piezoPin, piezoPitch);
delay(100);
analogWrite(piezoPin, 0);
loopLen += 250;
}
prevAlarmState = currAlarmState;
}
if (avgCelsiusTempRead > 0 && avgCelsiusTempRead <= 8) {
Serial.println("Temperature OK");
currAlarmState = NO_ALARM;
if (currAlarmState != prevAlarmState) {
alarmAck = 0;
}
digitalWrite(loLedPin, LOW);
digitalWrite(okLedPin, HIGH);
digitalWrite(hiLedPin, LOW);
prevAlarmState = currAlarmState;
}
if (avgCelsiusTempRead > 8 && avgCelsiusTempRead <= 100) {
Serial.println("ALARM: HIGH TEMP");
currAlarmState = HIGH_TEMP;
if (currAlarmState != prevAlarmState) {
alarmAck = 0;
}
digitalWrite(loLedPin, LOW);
digitalWrite(okLedPin, LOW);
digitalWrite(hiLedPin, HIGH);
if (alarmAck == 0) {
analogWrite(piezoPin, piezoPitch);
delay(300);
analogWrite(piezoPin, 0);
loopLen += 300;
}
prevAlarmState = currAlarmState;
}
if (avgCelsiusTempRead < -30 || avgCelsiusTempRead > 100) {
Serial.println("ALARM: TEMP OUTSIDE SPECIFICATIONS");
currAlarmState = OUTSIDE_SPECS;
if (currAlarmState != prevAlarmState) {
alarmAck = 0;
}
digitalWrite(loLedPin, HIGH);
digitalWrite(okLedPin, LOW);
digitalWrite(hiLedPin, HIGH);
if (alarmAck == 0) {
analogWrite(piezoPin, piezoPitch);
}
delay(300);
loopLen += 300;
analogWrite(piezoPin, 0);
digitalWrite(loLedPin, LOW);
digitalWrite(okLedPin, LOW);
digitalWrite(hiLedPin, LOW);
prevAlarmState = currAlarmState;
}

delay(2000-loopLen);
}

/*
alarm with Acknowledge

If the input turns 0 to 1 o/p led blinks with the common buzzer o/p.if ack i/p (push button)
pressed the buzzer will mute.
but if the second alarm triggered buzzer will get activated again.
*/
const int ack= 6;
const int buzzer = 9;
const int input1=2;
const int input2=3;
const int led1=7;
const int led2=8;

int S1;
int S2;

void setup() {

pinMode (input1,INPUT);
pinMode (input2,INPUT);
pinMode (ack,INPUT);
pinMode (led1,OUTPUT);
pinMode (led2,OUTPUT);
pinMode (buzzer,OUTPUT);

}
void loop() {
S1=digitalRead(input1);
S2=digitalRead(input2);

if (S1==HIGH)
{
digitalWrite (led1,HIGH);
delay(500);
digitalWrite (led1,LOW);
delay(500);
digitalWrite (led1,HIGH);
digitalWrite (buzzer,HIGH);
}
else
{
digitalWrite (led1,LOW);
}
if
(S2==HIGH )
{
digitalWrite (led2,HIGH);
delay(500);
digitalWrite (led2,LOW);
delay(500);
digitalWrite (led2,HIGH);
digitalWrite (buzzer,HIGH);
}
else
{
digitalWrite (led2,LOW);

}
}

You might also like