void logging()
{
unsigned long m = millis();
m = m/1000;
logger.print(m);
logger.print(",");
if(is_okie())
logger.print("OKIE,");
else
logger.print("NOT OKIE,");
logger.print(reading_a1);
logger.print(",");
logger.print(reading_a2);
logger.print(",");
logger.print(reading_b1);
logger.print(",");
logger.print(reading_b2);
logger.print(",");
logger.println(((reading_a1+reading_a2)/2) - ((reading_b1+reading_b2)/2));
}
boolean dcheck_high()
{
int check = dcheck;
while(check>0)
{
check--;
if(digitalRead(softButtonPin)==HIGH)
return false;
}
return true;
}
boolean dcheck_low()
{
int check = dcheck;
while(check>0)
{
check--;
if(digitalRead(softButtonPin)==LOW)
return false;
}
return true;
}
double read_temperature()
{
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
// read
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Read 1 byte and then send ack
data_high = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();
//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
double tempData = 0x0000; // zero out the data
int frac; // data past the decimal point
// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
return tempData - 273.15;
}
double take_measurement(int index)
{
avg_temperature = 0.0;
for(int i=0;i<3;i++)
{
LED_inprogress(index);
delay(100);
}
for(int i=0;i<sample_rate;i++){
if(i%25==0) {LED_inprogress(index);}
r_temperature = read_temperature();
avg_temperature += r_temperature;
}
return avg_temperature/sample_rate;
}
boolean is_okie()
{
float temperature_diff = abs(((reading_a1+reading_a2)/2) - ((reading_b1+reading_b2)/2));
if(debug_mode)
Serial.println(temperature_diff);
return (temperature_diff < 2.0);
}
void LED_clear()
{
setcolor(1,0,0,0);
setcolor(2,0,0,0);
}
void LED_1stcompleted(boolean both)
{
if(both)
setcolor(1,0,255,0);
else
setcolor(1,255,255,0);
setcolor(2,0,0,0);
}
void LED_2ndcompleted(boolean both)
{
setcolor(1,0,255,0);
if(both)
setcolor(2,0,255,0);
else
setcolor(2,255,255,0);
}
void LED_OK()
{
setcolor(1,0,255,0);
setcolor(2,0,255,0);
delay(2000);
setcolor(1,0,0,0);
setcolor(2,0,0,0);
}
void LED_NOT(int index)
{
switch(index)
{
case 1: setcolor(1,255,0,0);
setcolor(2,0,255,0);
break;
case 2: setcolor(1,0,255,0);
setcolor(2,255,0,0);
break;
}
delay(2000);
}
void LED_inprogress(int index)
{
setcolor(index,200,200,0);
delay(100);
setcolor(index,0,0,0);
delay(100);
}
void setcolor (int ledset, unsigned char red, unsigned char green, unsigned char blue)
{
ledset = (ledset-1)*3;
analogWrite(ledPins[ledset], red);
analogWrite(ledPins[ledset+1], green);
analogWrite(ledPins[ledset+2], blue);
}
//Buzzer related function()
void playNote(int noteInt, long length, long breath = 100) {
length = length - breath;
buzz(buzzerPin, noteFreqArr[noteInt], length);
if(breath > 0) { //take a short pause or 'breath' if specified
delay(breath);
}
}
void playcompleted()
{
playNote(51,200);
playNote(52,200);
playNote(53,200);
playNote(54,200);
playNote(55,200);
}
void playswitch()
{
playNote(50,200);
playNote(53,200);
playNote(55,200);
}
void playsound()
{
playNote(50,200);
playNote(60,150);
playNote(50,200);
}
void buzz(int targetPin, long frequency, long length) {
long delayValue = 1000000/frequency/2;
long numCycles = frequency * length/ 1000;
for (long i=0; i < numCycles; i++){
digitalWrite(targetPin,HIGH);
delayMicroseconds(delayValue);
digitalWrite(targetPin,LOW);
delayMicroseconds(delayValue);
}
}
void reset_application()
{
// if(debug_mode)
// Serial.print("reset_application");
delay(100);
inactive_counter=0;
current_position = 0;
LED_clear();
}
//sleep related funtion()
void wakeUpNow()
{
if(is_sleeping)
{
Serial.println("is up");
is_sleeping = false;
reset_application();
}
}
void sleepNow()
{ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
attachInterrupt(1,wakeUpNow, LOW);
sleep_mode();
sleep_disable();
detachInterrupt(1);
}