#include <
OneWire.h>
#include <
DallasTemperature.h>
#include <
LiquidCrystal.h>
//********** Hardware Parameters **********
#define LightSensor A0
#define Beeper 7
#define Sensor 4
#define LcdBackLight 6
// needs to be PWM
#define GreenSintirisi A2
#define RedSintirisi A4
#define GreenKatapsixi A3
#define RedKatapsixi A5
#define LCD_RS 13
#define LCD_E 14
#define LCD_D4 9
#define LCD_D5 10
#define LCD_D6 11
#define LCD_D7 8
//********** Software Parameters **********
#define IntroDelay 200
#define HardwareIntroDelay 500
#define IntroDelay 250
#define HardwareIntroDelay 500
#define LowVoltageRead 0
#define HighVoltageRead 1023
#define LowLcdBacklightPwmn 50
#define HighLcdBacklightPwmn 255
#define TEMPERATURE_PRECISION 12
float tempSintirisiLimit = 7.50;
float tempKatapsixiLimit = -10.0;
float tempSintirisi;
float tempKatapsixi;
float tempExwteriki1;
float tempExwteriki2;
int beepCount;
LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
OneWire oneWire(Sensor);
DallasTemperature sensors(&oneWire);
DeviceAddress sintirisi, katapsixi, exwteriki1, exwteriki2;
byte Top[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B10001,
B10001,
};
byte Bottom[8] = {
B10001,
B10001,
B10001,
B10001,
B11111,
B11111,
B11111,
B11111,
};
void setup()
{
pinMode(LightSensor,
INPUT);
pinMode(GreenSintirisi,
OUTPUT);
pinMode(RedSintirisi,
OUTPUT);
pinMode(GreenKatapsixi,
OUTPUT);
pinMode(RedKatapsixi,
OUTPUT);
pinMode(LcdBackLight,
OUTPUT);
pinMode(Beeper,
OUTPUT);
Serial.
begin(9600);
lcd.
begin(16, 2);
sensors.
begin();
lcd.
createChar(0, Top);
lcd.
createChar(1, Bottom);
sensors.
setResolution(sintirisi, 12);
sensors.
setResolution(katapsixi, 12);
sensors.
setResolution(exwteriki1, 12);
sensors.
setResolution(exwteriki2, 12);
sensors.
getAddress(sintirisi, 0);
sensors.
getAddress(katapsixi, 1);
sensors.
getAddress(exwteriki1, 2);
sensors.
getAddress(exwteriki2, 3);
HardwareIntro();
Intro();
Sensors_Info();
lcd.
clear();
}
void loop()
{
analogWrite(LcdBackLight,
map(
analogRead(LightSensor),LowVoltageRead,HighVoltageRead,HighL cdBacklightPwmn,LowLcdBacklightPwmn));
GetTemps();
printTemperature();
Set_Leds_Alarm();
Serial_output();
delay(500);
}
void HardwareIntro()
{
digitalWrite(LcdBackLight,1);
digitalWrite(GreenSintirisi,1);
delay(HardwareIntroDelay);
digitalWrite(LcdBackLight,0);
digitalWrite(GreenSintirisi,0);
digitalWrite(RedSintirisi,1);
delay(HardwareIntroDelay);
digitalWrite(LcdBackLight,1);
digitalWrite(RedSintirisi,0);
digitalWrite(RedKatapsixi,1);
delay(HardwareIntroDelay);
digitalWrite(LcdBackLight,0);
digitalWrite(RedKatapsixi,0);
digitalWrite(GreenKatapsixi,1);
delay(HardwareIntroDelay);
digitalWrite(LcdBackLight,1);
digitalWrite(GreenKatapsixi,0);
delay(HardwareIntroDelay);
digitalWrite(GreenSintirisi,1);
digitalWrite(RedSintirisi,1);
digitalWrite(RedKatapsixi,1);
digitalWrite(GreenKatapsixi,1);
digitalWrite(Beeper,1);
delay(HardwareIntroDelay);
digitalWrite(GreenSintirisi,0);
digitalWrite(RedSintirisi,0);
digitalWrite(RedKatapsixi,0);
digitalWrite(GreenKatapsixi,0);
digitalWrite(Beeper,0);
delay(HardwareIntroDelay);
}
void Intro()
{
lcd.
clear();
lcd.
setCursor(0, 0);
lcd.
print(
" Thermometer V1 ");
delay(IntroDelay);
lcd.
setCursor(2, 1);
lcd.
print(
"b");
delay(IntroDelay);
lcd.
print(
"y");
lcd.
print(
" ");
delay(IntroDelay);
lcd.
print(
"h");
delay(IntroDelay);
lcd.
print(
"e");
delay(IntroDelay);
lcd.
print(
"r");
delay(IntroDelay);
lcd.
print(
"c");
delay(IntroDelay);
lcd.
print(
"t");
delay(IntroDelay);
lcd.
print(
"r");
delay(IntroDelay);
lcd.
print(
"a");
delay(IntroDelay);
lcd.
print(
"p");
delay(IntroDelay);
}
void Sensors_Info()
{
lcd.
clear();
lcd.
setCursor(0, 0);
lcd.
print(sensors.
getDeviceCount(),
DEC);
lcd.
print(
" Sensors Found");
lcd.
setCursor(0, 1);
printAddress(sintirisi);
delay(1000);
lcd.
setCursor(0, 1);
printAddress(katapsixi);
delay(1000);
lcd.
setCursor(0, 1);
printAddress(exwteriki1);
delay(1000);
lcd.
setCursor(0, 1);
printAddress(exwteriki2);
delay(1000);
}
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) lcd.
print(
"0");
lcd.
print(deviceAddress[i],
HEX);
}
}
void GetTemps()
{
sensors.
requestTemperatures();
tempSintirisi = sensors.
getTempC(sintirisi);
tempKatapsixi = sensors.
getTempC(katapsixi);
tempExwteriki1 = sensors.
getTempC(exwteriki1);
tempExwteriki2 = sensors.
getTempC(exwteriki2);
}
void printTemperature()
{
lcd.
setCursor(0, 0);
lcd.
print(tempSintirisi,2);
lcd.
print((
char)
B11011111);
lcd.
print(
"C ");
lcd.
setCursor(0, 1);
lcd.
print(tempKatapsixi,2);
lcd.
print((
char)
B11011111);
lcd.
print(
"C ");
lcd.
setCursor(9, 0);
lcd.
print(tempExwteriki1,2);
lcd.
print((
char)
B11011111);
lcd.
print(
"C ");
lcd.
setCursor(9, 1);
lcd.
print(tempExwteriki2,2);
lcd.
print((
char)
B11011111);
lcd.
print(
"C ");
}
void Set_Leds_Alarm()
{
if ( tempSintirisi < tempSintirisiLimit ){
digitalWrite(GreenSintirisi,1);
digitalWrite(RedSintirisi,0);
}
else
{
digitalWrite(GreenSintirisi,0);
digitalWrite(RedSintirisi,1);
}
if ( tempKatapsixi < tempKatapsixiLimit ){
digitalWrite(GreenKatapsixi,1);
digitalWrite(RedKatapsixi,0);
}
else
{
digitalWrite(GreenKatapsixi,0);
digitalWrite(RedKatapsixi,1);
}
if ( beepCount == 900 )
digitalWrite(Beeper,
HIGH);
else digitalWrite(Beeper,
LOW);
if ( ( tempSintirisi > tempSintirisiLimit ) || ( tempKatapsixi > tempKatapsixiLimit ) ){
beepCount++;
}
else{
beepCount = 0;
}
if ( beepCount > 3599 ) beepCount = 0;
}
void Serial_output()
{
Serial.
print((
millis()/1000));
Serial.
print(
";");
Serial.
print(
int(tempSintirisi));
Serial.
print(
",");
Serial.
print(
int(( tempSintirisi -
int(tempSintirisi) ) * 100));
Serial.
print(
";");
Serial.
print(
int(tempKatapsixi));
Serial.
print(
",");
Serial.
print(
int(( tempKatapsixi -
int(tempKatapsixi) ) * 100));
Serial.
print(
";");
Serial.
print(
int(tempExwteriki1));
Serial.
print(
",");
Serial.
print(
int(( tempExwteriki1 -
int(tempExwteriki1) ) * 100));
Serial.
print(
";");
Serial.
print(
int(tempExwteriki2));
Serial.
print(
",");
Serial.
print(
int(( tempExwteriki2 -
int(tempExwteriki2) ) * 100));
Serial.
println();
}