// After running the simulator, click on the DS18B20 chip to change the temperature
// Chip by bonnyr, source code: https://github.com/bonnyr/wokwi-ds1820-custom-chip/
//https://wokwi.com/projects/358129234661487617
//2024_02_22_DB18S20_DHT22_LCD_SD_RTC_V4 ==> Nessa versão vou incluir o
//RTC1307
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>
#include <LiquidCrystal.h>
#include <SdFat.h>
#include <Arduino.h>
//#include <uRTCLib.h>
//#include <LiquidCrystal_I2C_Hangul.h>
#include "RTClib.h"
#include "pitches.h"
OneWire oneWire(8);
DallasTemperature sensor(&oneWire);
DHT dht(9,DHT22); // Declara objeto do tipo DHT
float umid, temp, senterm; // Declara variáveis
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);
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"};
void setup(void) {
Serial.begin(9600);
delay(2);
sensor.begin();
dht.begin(); // Inicializa objeto dht
delay(20);
lcd.begin(16,2);
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();
}
}
void loop(void) {
sensor.requestTemperatures();
Serial.print("Temperature DB18S20 é: ");
delay(10);
Serial.println(sensor.getTempCByIndex(0));
delay(1000);
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
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");
delay(2000);
// Wait a few seconds between measurements.
//delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
//float f = dht.readTemperature(false);
//lcd.setCursor(0,0);
//lcd.print("Messung laeuft");
lcd.setCursor(0,0);
//lcd.print("Temp: "+String(t,1) +" C");
lcd.print("T1(C)");
lcd.setCursor(0,1);
lcd.print(sensor.getTempCByIndex(0));
lcd.setCursor(6,0);
lcd.print("T2(C)");
lcd.setCursor(6,1);
//lcd.print("T2: "+String(t,1) +" C");
lcd.print(String(t,1));
lcd.setCursor(12,0);
lcd.print("UR-%");
lcd.setCursor(12,1);
//lcd.print("F: "+String(h,1) + " %");
lcd.print(String(h,1));
//### Início RTC
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();
/*if(now.hour() == 13&&now.minute()==10){
//Serial.println("");
lcd.print("990 597 5266");
for (int thisNote = 0; thisNote < length_alwayswithme; thisNote++) {
int noteDuration = 250 * duration_alwayswithme[thisNote];
tone(tonepin, melody_alwayswithme[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.10;
delay(pauseBetweenNotes);
*/
delay(3000);
if (!meuArquivo.open("Grava_temperatura.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("Leitura Temperatura: ");
meuArquivo.print ("T1 (DB18S20= )");
meuArquivo.println(sensor.getTempCByIndex(0));
//Serial.println(sensor.getTempCByIndex(0));
meuArquivo.print("Current time: ");
meuArquivo.print(now.year(), DEC);
meuArquivo.print('/');
meuArquivo.print(now.month(), DEC);
meuArquivo.print('/');
meuArquivo.print(now.day(), DEC);
meuArquivo.print(" (");
meuArquivo.print(daysOfTheWeek[now.dayOfTheWeek()]);
meuArquivo.print(") ");
meuArquivo.print(now.hour(), DEC);
meuArquivo.print(':');
meuArquivo.print(now.minute(), DEC);
meuArquivo.print(':');
meuArquivo.print(now.second(), DEC);
meuArquivo.println();
delay(1000); // every second
meuArquivo.close();
}