1#include <HCSR04.h>
2#include <LiquidCrystal.h>
3#define trigPin 7
4#define echoPin 6
5#define buzzer 9
6#define backlight 10
7
8LiquidCrystal lcd(12, 11, 5, 4, 3, 8);
9UltraSonicDistanceSensor distanceSensor(trigPin, echoPin);
10
11int tempReading;
12double tempK;
13float tempC;
14int rounded;
15int temp_round;
16volatile boolean modes = 0;
17double distance;
18
19void setup() {
20 lcd.begin(16, 2);
21 attachInterrupt(0, changeMode, FALLING);
22 pinMode(2, INPUT);
23 pinMode(buzzer, OUTPUT);
24 pinMode(backlight, OUTPUT);
25 digitalWrite(backlight, HIGH);
26 backlightOn();
27}
28
29void loop() {
30 tempReading = analogRead(A0);
31 tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
32 tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );
33 tempC = tempK - 273.15;
34 distance = distanceSensor.measureDistanceCm(tempC);
35 temp_round = round(tempC);
36 if (modes == 1) {
37 backlightOn();
38 if (distance >= 300 || distance <= 0) {
39 rounded = 0;
40 lcd.clear();
41 lcd.print("Out of range");
42 lcd.setCursor(0, 1);
43 lcd.print("Temperature:" + String(temp_round) + " C");
44 }
45 else {
46 rounded = round(distance);
47 lcd.clear();
48 lcd.print("Distance: ");
49 lcd.print(rounded);
50 lcd.print(" cm");
51 lcd.setCursor(0, 1);
52 lcd.print("Temperature:" + String(temp_round) + " C");
53 }
54 } else {
55 if (distance >= 300 || distance <= 0) {
56 rounded = 0;
57 lcd.clear();
58 backlightOff();
59 }
60 else {
61 rounded = round(distance);
62 if (distance >= 200) {
63 backlightOff();
64 lcd.clear();
65 }
66 else if (distance <= 200 && distance > 100) {
67 backlightOn();
68 lcd.clear();
69 lcd.print("Please keep away");
70 lcd.setCursor(0, 1);
71 lcd.print("Distance:");
72 lcd.print(rounded);
73 lcd.print(" cm");
74 }
75 else if (distance <= 100 && distance > 50) {
76 backlightOn();
77 lcd.clear();
78 lcd.print("Keep away");
79 lcd.setCursor(0, 1);
80 lcd.print("Distance:");
81 lcd.print(rounded);
82 lcd.print(" cm");
83 delay(200);
84 buzz();
85 backlightOff();
86 delay(100);
87 unbuzz();
88 backlightOn();
89 delay(100);
90 }
91 else if (distance <= 50) {
92 backlightOn();
93 lcd.clear();
94 lcd.print("STAY AWAY!");
95 lcd.setCursor(0, 1);
96 lcd.print("Distance:");
97 lcd.print(rounded);
98 lcd.print(" cm");
99 delay(200);
100 buzz();
101 backlightOff();
102 delay(200);
103 unbuzz();
104 backlightOn();
105 delay(200);
106 buzz();
107 backlightOff();
108 delay(200);
109 unbuzz();
110 backlightOn();
111 }
112 }
113 }
114 delay(700);
115}
116
117void changeMode() {
118 modes = !modes;
119}
120
121void backlightOn() {
122 digitalWrite(backlight, HIGH);
123}
124
125void backlightOff() {
126 digitalWrite(backlight, LOW);
127}
128
129void buzz() {
130 digitalWrite(buzzer, HIGH);
131}
132
133void unbuzz() {
134 digitalWrite(buzzer, LOW);
135}
136