#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "LedControl.h"
LedControl lc = LedControl(12, 11, 10, 1);
#define UVPin A3
#define Rled 16
#define Gled 15
#define Bled 14
#define Buzzer 13
#define Speaker 5
int i, k, UVValue;
String str;
String VoiceCmd;
byte HappySmile[8] = {
0b00111100,
0b01000010,
0b10011001,
0b10000001,
0b10100101,
0b10011001,
0b01000010,
0b00111100
};
byte SadSmile[8] = {
0b00111100,
0b01000010,
0b10011001,
0b10000001,
0b10011001,
0b10100101,
0b01000010,
0b00111100
};
byte normalSmile[8] = {
0b00111100,
0b01000010,
0b10011001,
0b10000001,
0b10000001,
0b10111101,
0b01000001,
0b00111100
};
void DrawHappySmile() {
for (i = 0; i < 8; i++)
lc.setRow(0, i, HappySmile[i]);
}
void DrawSadSmile() {
for (i = 0; i < 8; i++)
lc.setRow(0, i, SadSmile[i]);
}
void DrawnormalSmile() {
for (i = 0; i < 8; i++)
lc.setRow(0, i, normalSmile[i]);
}
void setup() {
Serial.begin(9600);
pinMode(Rled, OUTPUT);
pinMode(Gled, OUTPUT);
pinMode(Bled, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Speaker, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("UV System");
lcd.setCursor(1, 1);
lcd.print("Ebrahem Sleman");
lc.shutdown(0, false); // Set brightness to a medium value
lc.setIntensity(0, 8); // Clear the display
lc.clearDisplay(0);
DrawHappySmile();
delay(2000);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("UV MONITOR");
lcd.setCursor(0, 1);
lcd.print("BT: start stop ");
delay(2000);
}
void loop() {
if (Serial.available()) {
VoiceCmd = Serial.readString();
while (VoiceCmd == "start" && !Serial.available()) {
str = "UV level: ";
UVValue = analogRead(UVPin);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UV value: ");
lcd.print(UVValue);
lcd.setCursor(4, 1);
if (UVValue <2) {
lcd.print("Safty");
str = str + String(UVValue) + " Safty";
Serial.println(str);
DrawHappySmile();
digitalWrite(Gled, 1);
digitalWrite(Rled, 0);
digitalWrite(Bled, 0);
} else if (UVValue <5) {
lcd.print("Be careful");
str = str + String(UVValue) + " Be careful";
Serial.println(str);
DrawnormalSmile();
digitalWrite(Gled, 0);
digitalWrite(Rled, 0);
digitalWrite(Bled, 1);
for (k = 0; k < 10; k++) {
digitalWrite(Buzzer, 1);
delay(200);
digitalWrite(Buzzer, 0);
delay(200);
}
} else {
lcd.print("Dangerous");
str = str + String(UVValue) + " Dangerous";
Serial.println(str);
DrawSadSmile();
for (k = 0; k < 20; k++)
{
digitalWrite(Buzzer, 0);
digitalWrite(Gled, 0);
digitalWrite(Rled, 1);
digitalWrite(Bled, 0);
for (i = 1000; i > 500; i -= 10) {
tone(Speaker, i);
delay(5);
}
digitalWrite(Rled, 0);
digitalWrite(Bled, 1);
for (i = 500; i < 1000; i += 10) {
tone(Speaker, i);
delay(5);
}
}
noTone(Speaker);
digitalWrite(Bled, 0);
}
delay(1000);
}
if (VoiceCmd == "stop") {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("System OFF");
digitalWrite(Gled, 0);
digitalWrite(Rled, 0);
digitalWrite(Bled, 0);
digitalWrite(Buzzer, 0);
lc.clearDisplay(0);
}
}
}