#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
#include <WiFi.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define botao1 19
#define botao2 25
#define uv 34
#define particulas 35
#define TVOC 32
#define dataPin 33
int telaAtual = 0;
int ultimaAtividade = 0;
int ultimaLeitura1 = 0;
int ultimaLeitura2 = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHTesp dht;
void setup() {
dht.setup(dataPin, DHTesp::DHT22);
pinMode(botao1, INPUT_PULLUP);
pinMode(botao2, INPUT_PULLUP);
pinMode(uv, INPUT);
pinMode(particulas, INPUT);
pinMode(TVOC, INPUT);
lcd.init();
lcd.setBacklight(HIGH);
}
void loop() {
int estadoB1 = digitalRead(botao1);
int estadoB2 = digitalRead(botao2);
int uvLeitura = analogRead(uv);
int particulasPot = analogRead(particulas);
int particulasLeitura = map(particulasPot, 0, 4095, 0, 1400);
int TVOCpot = analogRead(TVOC);
int TVOCLeitura = map(TVOCpot, 0, 4095, 0, 65000);
float t = dht.getTemperature();
float h = dht.getHumidity();
if(estadoB1 == 0 && (millis() - ultimaLeitura1 > 100)) {
lcd.setBacklight(HIGH);
if(telaAtual == 0) {
telaAtual = 1;
}
else if(telaAtual == 1) {
telaAtual = 2;
}
else if(telaAtual == 2) {
telaAtual = 3;
}
else if(telaAtual == 3) {
telaAtual = 0;
}
ultimaAtividade = millis();
ultimaLeitura1 = millis();
}
if(estadoB2 == 0 && (millis() - ultimaLeitura2 > 100)) {
lcd.setBacklight(HIGH);
if(telaAtual == 3) {
telaAtual = 2;
}
else if(telaAtual == 2) {
telaAtual = 1;
}
else if(telaAtual == 1) {
telaAtual = 0;
}
else if(telaAtual == 0) {
telaAtual = 3;
}
ultimaAtividade = millis();
ultimaLeitura2 = millis();
}
if(millis() - ultimaAtividade > 10000) {
lcd.setBacklight(LOW);
}
if(telaAtual == 0) {
lcd.setCursor(0, 0);
lcd.print("TVOC = ");
lcd.setCursor(7, 0);
lcd.print(TVOCLeitura);
lcd.print(" PPB");
if(TVOCLeitura < 10000){
lcd.setCursor(15,0);
lcd.print(" ");
}
if(TVOCLeitura < 1000){
lcd.setCursor(14,0);
lcd.print(" ");
}
if(TVOCLeitura < 100){
lcd.setCursor(13,0);
lcd.print(" ");
}
if(TVOCLeitura < 10){
lcd.setCursor(12,0);
lcd.print(" ");
}
lcd.setCursor(0, 1);
lcd.print("AQI = ");
if(TVOCLeitura < 250) {
lcd.setCursor(6, 1);
lcd.print("1 ");
}
if(TVOCLeitura > 250 && TVOCLeitura < 500) {
lcd.setCursor(6, 1);
lcd.print("2 ");
}
if(TVOCLeitura > 500 && TVOCLeitura < 1000) {
lcd.setCursor(6, 1);
lcd.print("3 ");
}
if(TVOCLeitura > 1000 && TVOCLeitura < 3000) {
lcd.setCursor(6, 1);
lcd.print("4 ");
}
if(TVOCLeitura > 3000) {
lcd.setCursor(6, 1);
lcd.print("5 ");
}
}
if (telaAtual == 1) {
lcd.setCursor(0, 0);
lcd.print("eCO2 = ");
lcd.setCursor(7, 0);
lcd.print(TVOCLeitura);
lcd.print(" PPM");
if(TVOCLeitura < 10000){
lcd.setCursor(15,0);
lcd.print(" ");
}
if(TVOCLeitura < 1000){
lcd.setCursor(14,0);
lcd.print(" ");
}
if(TVOCLeitura < 100){
lcd.setCursor(13,0);
lcd.print(" ");
}
if(TVOCLeitura < 10){
lcd.setCursor(12,0);
lcd.print(" ");
}
lcd.setCursor(0, 1);
lcd.print("Prt = ");
lcd.setCursor(6, 1);
lcd.print(particulasLeitura);
lcd.print(" ug/m3");
if(particulasLeitura < 1000){
lcd.setCursor(15, 1);
lcd.print(" ");
}
if(particulasLeitura < 100){
lcd.setCursor(14, 1);
lcd.print(" ");
}
if(particulasLeitura < 10){
lcd.setCursor(13, 1);
lcd.print(" ");
}
}
if(telaAtual == 2) {
lcd.setCursor(0, 0);
lcd.print("Temp = ");
lcd.print(t);
lcd.print(" ");
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Umid = ");
lcd.print(h);
lcd.println(" %");
if(t > -10 && t < 0) {
lcd.setCursor(15, 0);
lcd.print(" ");
}
if(t > 9) {
lcd.setCursor(15, 0);
lcd.print(" ");
}
if(t < 10 && t > -0.1) {
lcd.setCursor(14, 0);
lcd.print(" ");
}
}
if(telaAtual == 3) {
lcd.setCursor(0, 0);
lcd.print("Indice UV = ");
if(uvLeitura < 70){
lcd.setCursor(12, 0);
lcd.print("0 ");
lcd.setCursor(0, 1);
lcd.print("Baixo ");
}
if(uvLeitura < 99 && uvLeitura > 70){
lcd.setCursor(12, 0);
lcd.print("1 ");
lcd.setCursor(0, 1);
lcd.print("Baixo ");
}
if(uvLeitura < 126 && uvLeitura > 99){
lcd.setCursor(12, 0);
lcd.print("2 ");
lcd.setCursor(0, 1);
lcd.print("Baixo ");
}
if(uvLeitura < 156 && uvLeitura > 126){
lcd.setCursor(12, 0);
lcd.print("3 ");
lcd.setCursor(0, 1);
lcd.print("Moderado ");
}
if(uvLeitura < 188 && uvLeitura > 156){
lcd.setCursor(12, 0);
lcd.print("4 ");
lcd.setCursor(0, 1);
lcd.print("Moderado ");
}
if(uvLeitura < 216 && uvLeitura > 188){
lcd.setCursor(12, 0);
lcd.print("5 ");
lcd.setCursor(0, 1);
lcd.print("Moderado ");
}
if(uvLeitura < 245 && uvLeitura > 216){
lcd.setCursor(12, 0);
lcd.print("6 ");
lcd.setCursor(0, 1);
lcd.print("Alto ");
}
if(uvLeitura < 272 && uvLeitura > 245){
lcd.setCursor(12, 0);
lcd.print("7 ");
lcd.setCursor(0, 1);
lcd.print("Alto ");
}
if(uvLeitura < 303 && uvLeitura > 272){
lcd.setCursor(12, 0);
lcd.print("8 ");
lcd.setCursor(0, 1);
lcd.print("Muito Alto ");
}
if(uvLeitura < 333 && uvLeitura > 303){
lcd.setCursor(12, 0);
lcd.print("9 ");
lcd.setCursor(0, 1);
lcd.print("Muito Alto ");
}
if(uvLeitura < 363 && uvLeitura > 333){
lcd.setCursor(12, 0);
lcd.print("10 ");
lcd.setCursor(0, 1);
lcd.print("Muito Alto ");
}
if(uvLeitura > 363){
lcd.setCursor(12, 0);
lcd.print("11+ ");
lcd.setCursor(0, 1);
lcd.print("Extremo ");
}
}
}