/*
*/
#include <Ds1302.h>
#include "DHT.h"
#include <LiquidCrystal.h>
#include <SD.h>
#define CS_PIN 53
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
#define DS1302_RAMSIZE 31
const int rs = 3; // Pin 3 on Arduino to pin 4 (RS) on LCD
const int en = 4; // Pin 3 on Arduino to pin 6 (E) on LCD
const int d4 = 12; // Pin 12 on Arduino to pin 11 (D4) on LCD
const int d5 = 10; // Pin 10 on Arduino to pin 12 (D5) on LCD
const int d6 = 9; // Pin 9 on Arduino to pin 13 (D6) on LCD
const int d7 = 8; // Pin 8 on Arduino to pin 14 (D7) on LCD
File root;
DHT dht(DHTPIN, DHTTYPE);
// DS1302 rtc(ce_pin, sck_pin, io_pin);
Ds1302 rtc(5, 7, 6);
uint8_t prev_second, prev_min;
const char data[] = "Hello World";
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const static char* WeekDays[] =
{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
void setup()
{
Serial.begin(115200);
rtc.init();
dht.begin();
lcd.begin(20, 4);
// Print Hello World! to the LCD.
lcd.setCursor(3, 0);
lcd.print("besm allah");
Ds1302::DateTime dt = {
.year = 22,
.month = Ds1302::MONTH_NOV,
.day = 27,
.hour = 2,
.minute = 15,
.second = 45,
.dow = Ds1302::DOW_SUN
};
rtc.setDateTime(&dt);
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.");
}
uint8_t readByte()
{
pinMode(6, INPUT);
uint8_t value = 0;
for (uint8_t i = 0; i < 8; ++i)
{
uint8_t bit = digitalRead(6);
value |= (bit << i);
digitalWrite(7, HIGH);
digitalWrite(7, LOW);
}
return value;
}
void printTime(Ds1302::DateTime &now)
{
Serial.print("20");
Serial.print(now.year);
Serial.print('-');
if (now.month < 10)
{
Serial.print('0');
}
Serial.print(now.month);
Serial.print('-');
if (now.day < 10)
{
Serial.print('0');
}
Serial.print(now.day);
Serial.print(' ');
Serial.print(WeekDays[now.dow - 1]);
Serial.print(' ');
if (now.hour < 10)
{
Serial.print('0');
}
Serial.print(now.hour);
Serial.print(':');
if (now.minute < 10)
{
Serial.print('0');
}
Serial.print(now.minute);
Serial.print(':');
if (now.second < 10)
{
Serial.print('0');
}
Serial.print(now.second);
Serial.println();
}
void loop()
{ float temperature, humidity;
Ds1302::DateTime now;
rtc.getDateTime(&now);
char dateString[20] = {0,};
char timeString[20] = {0,};
if (now.second != prev_second)
{
temperature = dht.readTemperature();
humidity = dht.readHumidity();
datetimeString(now, dateString, timeString);
// Check if any reads failed and exit early (to try again).
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C "));
lcd.setCursor(0, 1);
lcd.print(F("Humidity: "));
lcd.println(humidity);
lcd.setCursor(20, 0);
lcd.print(("Temp: "));
lcd.print(temperature);
lcd.println(F("°C "));
lcd.setCursor(20, 1);
lcd.print(dateString);
lcd.print(" ");
lcd.print(timeString);
prev_second = now.second;
uint8_t ram[DS1302_RAMSIZE];
for (int i = 0; i < 11; ++i)
{
pinMode(6, OUTPUT);
shiftOut(6, 7, LSBFIRST, 0xC1 + 2 * i);
ram[i] = readByte();
}
Serial.print((const char*)ram);
lcd.print((const char*)ram);
Serial.print(' ');
printTime(now);
if (now.minute != prev_min)
{ prev_min = now.minute;
File writeFile = SD.open("data.txt", FILE_WRITE);
writeFile.write("//");
writeFile.write(dateString);
writeFile.write("--");
writeFile.write(timeString);
writeFile.write("--hum:");
char hum[6];
snprintf (hum, sizeof(hum), "%f", humidity);
writeFile.write(hum);
writeFile.write("--temp:");
writeFile.write(temperature);
writeFile.close();
File textFile = SD.open("data.txt");
if (textFile) {
Serial.print("data.txt: ");
while (textFile.available()) {
Serial.write(textFile.read());
}
Serial.println("");
Serial.println("/file end");
textFile.close();
} else {
Serial.println("error opening wokwi.txt!");
}
}
}
delay(100);
}
void datetimeString(Ds1302::DateTime dt, char* dateString, char* timeString)
{
snprintf_P(dateString,
10,
PSTR("%04u-%02u-%02u"),
dt.year + 2000,
dt.month,
dt.day);
snprintf_P(timeString,
10,
PSTR("%02u:%02u:%02u"),
dt.hour,
dt.minute,
dt.second);
}
/*
void formstring()
{ char dateString[20] = {0,};
char timeString[20] = {0,};
snprintf_P(dateString,
countof(dateString),
PSTR("%04u-%02u-%02u"),
dt.Year(),
dt.Month(),
dt.Day());
snprintf_P(timeString,
countof(dateString),
PSTR("%02u:%02u-%02u"),
dt.Hour(),
dt.Minute(),
dt.Second());
/*lcd.setCursor(0,0);
lcd.print(dateString);
lcd.setCursor(0,1);
lcd.print(timeString);
}*/