//2024_04_17_V1_Stand_Alone_DHT22_DB18S20_LCD
// ???????  Funcionou  ######

//Atenção, fiz esse esquema só para colocar no caderno(documentação),
//porém não tem nas biblioteca o chip ATmega328-P, só os arduinos

#include <DHT.h>					//Sensor DHT22

#include <DallasTemperature.h>		//Sensor DB18S20
#include <OneWire.h>				//Sensor DB18S20

//#include <SdFat.h>					//Cartão SD
//#include <Arduino.h>

//#include "RTClib.h"

#include <LiquidCrystal.h>

DHT dht(9,DHT22);           	// Declara objeto dht do tipo DHT
float umid, temp, senterm;      // Declara variáveis

OneWire oneWire(8);
DallasTemperature sensor(&oneWire);

/*SdFat sdCard;
//SdFile meuArquivo;
//const int chipSelect = 10;      //Pino CS Cartão SD

RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);
*/
void setup() {
	Serial.begin(9600);
	dht.begin();       // Inicializa objeto dht	(DHT22)
	delay(20);
	sensor.begin();		// Inicializa objeto sensor (DB18S20)
	if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt();   // Inicializa o modulo SD
	if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();}
	lcd.begin(16,2);
	delay (20);
}

void loop() {

  chamaSENSORDHT22();
  chamaSENSORDB18S20();
  //chamaSD();
  //chamaRTC();
  chamaLCD();
  chamaSerial();
  delay(2000);
}
 
void chamaSENSORDHT22()
{
  umid = dht.readHumidity();    // Lê umidade
  temp = dht.readTemperature(); // Lê temperatura
  senterm = dht.computeHeatIndex(temp,umid,false);//sensação térmica true=farenheit e false=graus celsius
  delay(2000);
}

void chamaSENSORDB18S20()
{
  sensor.requestTemperatures();
  delay(10);
}

/*
void chamaSD()
{
  if (!meuArquivo.open("Teste-V1234.txt", O_RDWR | O_CREAT | O_AT_END))     // Abre o arquivo LER_POT.TXT
  {
    sdCard.errorHalt("Erro na abertura do arquivo Grava_temperatura.txt!");
  }
  meuArquivo.println(" - V1234 - ");
  meuArquivo.print (" 1ª versão ");
  meuArquivo.println("Teste todos juntos");
  meuArquivo.println();
  meuArquivo.close();
}

void chamaRTC()
{
  // Comentei a linha abaixo porque qdo rodava não mostrava a hora correta
  // e sim 3 horas a menos.
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //CAPTURA A DATA E HORA EM QUE O SKETCH É COMPILADO
  
  //DateTime now = rtc.now();
 }
  */
void chamaLCD()
{
  lcd.setCursor(0,0);
  //lcd.print("Temp: "+String(t,1) +" C");
  lcd.print("T1(C)");
  lcd.setCursor(0,1);
  lcd.print(sensor.getTempCByIndex(0));			//Referente ao Sensor DB18S20
  lcd.setCursor(6,0);
  lcd.print("T2(C)");
  lcd.setCursor(6,1);
  lcd.print(temp);
  lcd.setCursor(12,0);
  lcd.print("UR-%");
  lcd.setCursor(12,1);
  lcd.print(umid);
  delay(3000);
  lcd.clear();			//Início da mensagem do SD
  lcd.setCursor(0,0);
  lcd.print("Teste-V1234.txt");
  lcd.setCursor(0,1);
  lcd.setCursor(9,0);
  //lcd.print("Teste tds juntos");
  //lcd.setCursor(6,1);
  lcd.setCursor(0,1);
  lcd.print("Teste tds juntos");
  lcd.print("");
  delay(2000);
  lcd.clear();			//Fim da mensagem do SD
  delay(2000);
}
void chamaSerial()
{
   Serial.print("\n\nUmidade: ");
   Serial.print(umid);           // Exibe umidade
   Serial.print(" %");
   Serial.print("\nTemperatura: ");
   Serial.print(temp);           // Exibe temp.
   Serial.print(" °C");
   Serial.print("\nSensação Térmica: ");
   Serial.print(senterm);
   Serial.println(" °C");
   
   Serial.print("Temperature DB18S20 é: ");
   Serial.println(sensor.getTempCByIndex(0));
   /*
   DateTime now = rtc.now();
   Serial.print("Current time: ");
   Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(" (");
   Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
   Serial.print(") ");
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();
   delay(1000); // every second
  //Serial.println();
   */
   delay(2000);  
}